)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"0d798cdd84419f0c565fa77c4c169d69ae757c39","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Replace retrying with tenacity"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We are replacing all usages of the \u0027retrying\u0027 package with"},{"line_number":10,"context_line":"\u0027tenacity\u0027 as the author of retrying is not actively maintaining"},{"line_number":11,"context_line":"the project. Tenacity is a fork of retrying, but has improved the"},{"line_number":12,"context_line":"interface and extensibility (see [1] for more details). Our end"},{"line_number":13,"context_line":"goal here is removing the retrying package from our requirements."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a8bc5a2_8857d624","line":11,"range":{"start_line":10,"start_character":11,"end_line":11,"end_character":11},"updated":"2016-09-27 12:10:49.000000000","message":"Do we have any links about it ? I quickly googled about it and I wasn\u0027t able to find anything relevant.\n\nThe tenacity project itself doesn\u0027t specify that as a reason for the fork. All it says is: \"Tenacity is an Apache 2.0 licensed general-purpose retrying library, written in Python, to simplify the task of adding retry behavior to just about anything. It originates from a fork of Retrying\" [0].\n\n[0] https://github.com/jd/tenacity/","commit_id":"fabf409e1998ec5c53bb285c983930f5c5a9da84"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"242a884375857a23bd0b988313ef892d7c19138c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Replace retrying with tenacity"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"We are replacing all usages of the \u0027retrying\u0027 package with"},{"line_number":10,"context_line":"\u0027tenacity\u0027 as the author of retrying is not actively maintaining"},{"line_number":11,"context_line":"the project. Tenacity is a fork of retrying, but has improved the"},{"line_number":12,"context_line":"interface and extensibility (see [1] for more details). Our end"},{"line_number":13,"context_line":"goal here is removing the retrying package from our requirements."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a8bc5a2_523642e8","line":11,"range":{"start_line":10,"start_character":11,"end_line":11,"end_character":11},"in_reply_to":"5a8bc5a2_8857d624","updated":"2016-09-27 19:59:17.000000000","message":"There\u0027s some discussion about it in [1]. Additionally you can see we were trying to get the retrying author\u0027s input in [2] (among other PRs) without response. Finally we tried to contact the retrying author off-line via email multiple times with no response.\n\n\nThe end goal here is to be able to push some changes to the \"retrying library\" (whichever that is tenacity or retrying) to support something like [3]. With retrying it was not possible because the author would ignore our PRs.... Hence the tenacity fork.\n\n\n\n[1] https://review.openstack.org/#/c/321867/\n[2] https://github.com/rholder/retrying/pull/55\n[3] http://lists.openstack.org/pipermail/openstack-dev/2016-April/092914.html","commit_id":"fabf409e1998ec5c53bb285c983930f5c5a9da84"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"0d798cdd84419f0c565fa77c4c169d69ae757c39","unresolved":false,"context_lines":[{"line_number":28,"context_line":"need to account for this via mocking of time.sleep before"},{"line_number":29,"context_line":"tenacity is imported."},{"line_number":30,"context_line":"- For retries that check a result, tenacity will raise if the retried"},{"line_number":31,"context_line":"function raises, whereas retrying retried on all exceptions."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"This patch updates all usages of retrying with tenacity."},{"line_number":34,"context_line":"Unit tests will be added where applicable."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"5a8bc5a2_8b6b5084","line":31,"updated":"2016-09-27 12:10:49.000000000","message":"Sorry but I\u0027m a bit reluctant to NIH projects that [people in] OpenStack push on projects [0]. AFAICT, retrying is working OK/fine I don\u0027t think we have had any major issues with that. So, if you can please point me to a major design flaw in retrying that justify the fork or the a document saying that retrying is not being actively maintained anymore as per comment on L11 I will be good with this change.\n\n[0] Ironic still suffers from making the choice of using WSME","commit_id":"fabf409e1998ec5c53bb285c983930f5c5a9da84"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"20da61b049e86a8433766dcccbb2f1afb32218c1","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"This patch updates all usages of retrying with tenacity."},{"line_number":34,"context_line":"Unit tests will be added/removed where applicable."},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"[1] https://github.com/jd/tenacity"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"Change-Id: Ie5eb3ddc196505e8f58ed14de9952284598586fb"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"fa6399be_4b156547","line":35,"updated":"2016-10-18 21:37:01.000000000","message":"I still generally agree with the comments Lucas made on patchset 1. The best place for that documentation to happen and a discussion around if this is a patch we would take would be in a bug, that this patch was assigned to.\n\nCan you please file a bug against Ironic about this, and include in there supporting documentation about why we\u0027re migrating off the old library, and preferably some information showing that other OpenStack projects are doing the same.\n\nThanks!","commit_id":"ad47f51ad6fb633989006aa8a40cfc1ae3a18244"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"8c38eb2a253766e6b90edfd584c3ebde08f397bc","unresolved":false,"context_lines":[{"line_number":36,"context_line":"[1] https://github.com/jd/tenacity"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"BLOCKED BY"},{"line_number":39,"context_line":"    https://github.com/jd/tenacity/issues/228"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"Co-Authored-By: Dmitry Tantsur \u003cdtantsur@protonmail.com\u003e"},{"line_number":42,"context_line":"Co-Authored-By: Riccardo Pittau \u003celfosardo@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"1f621f24_f637514c","line":39,"updated":"2020-11-09 03:13:24.000000000","message":"This is merged now, fyi.","commit_id":"ff75d41f443d1a1f2f6279bf98a339bd0cd3dc1a"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"5fa1b7ff6852eb556b95aabda7f54437db84df93","unresolved":false,"context_lines":[{"line_number":36,"context_line":"[1] https://github.com/jd/tenacity"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"BLOCKED BY"},{"line_number":39,"context_line":"    https://github.com/jd/tenacity/issues/228"},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"Co-Authored-By: Dmitry Tantsur \u003cdtantsur@protonmail.com\u003e"},{"line_number":42,"context_line":"Co-Authored-By: Riccardo Pittau \u003celfosardo@gmail.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"1f621f24_91e2679f","line":39,"in_reply_to":"1f621f24_f637514c","updated":"2020-11-09 08:34:57.000000000","message":"yep, thanks, I saw it was closed, the final fix is https://github.com/jd/tenacity/pull/236\nI guess we should update the commit message!","commit_id":"ff75d41f443d1a1f2f6279bf98a339bd0cd3dc1a"}],"ironic/common/neutron.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"cafa802fbcfa06fb93427d39b69ca6b009049e9a","unresolved":true,"context_lines":[{"line_number":926,"context_line":"              {\u0027port_id\u0027: port_id, \u0027status\u0027: status})"},{"line_number":927,"context_line":"    port \u003d _get_port_by_uuid(client, port_id)"},{"line_number":928,"context_line":"    LOG.debug(\u0027Port %(port_id)s status is: %(status)s\u0027,"},{"line_number":929,"context_line":"              {\u0027port_id\u0027: port_id, \u0027status\u0027: port[\u0027status\u0027]})"},{"line_number":930,"context_line":"    if port[\u0027status\u0027] \u003d\u003d status:"},{"line_number":931,"context_line":"        return True"},{"line_number":932,"context_line":"    raise exception.NetworkError("},{"line_number":933,"context_line":"        \u0027Port %(port_id)s failed to reach status %(status)s\u0027 % {"}],"source_content_type":"text/x-python","patch_set":27,"id":"50221c8e_e9e3348d","line":930,"range":{"start_line":929,"start_character":0,"end_line":930,"end_character":32},"updated":"2020-12-04 02:27:45.000000000","message":"Based on the history of this, it looks like this is reverting a valid change","commit_id":"47d6acf5d4aa1c2e1196b9b01ba98574452bd487"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"718f0b041e398bc318177e9ad660b1ffa200a945","unresolved":true,"context_lines":[{"line_number":926,"context_line":"              {\u0027port_id\u0027: port_id, \u0027status\u0027: status})"},{"line_number":927,"context_line":"    port \u003d _get_port_by_uuid(client, port_id)"},{"line_number":928,"context_line":"    LOG.debug(\u0027Port %(port_id)s status is: %(status)s\u0027,"},{"line_number":929,"context_line":"              {\u0027port_id\u0027: port_id, \u0027status\u0027: port[\u0027status\u0027]})"},{"line_number":930,"context_line":"    if port[\u0027status\u0027] \u003d\u003d status:"},{"line_number":931,"context_line":"        return True"},{"line_number":932,"context_line":"    raise exception.NetworkError("},{"line_number":933,"context_line":"        \u0027Port %(port_id)s failed to reach status %(status)s\u0027 % {"}],"source_content_type":"text/x-python","patch_set":27,"id":"ff6e1a51_ee576966","line":930,"range":{"start_line":929,"start_character":0,"end_line":930,"end_character":32},"in_reply_to":"50221c8e_e9e3348d","updated":"2020-12-08 10:51:39.000000000","message":"whoops, bad rebase","commit_id":"47d6acf5d4aa1c2e1196b9b01ba98574452bd487"}],"ironic/conductor/task_manager.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"cafa802fbcfa06fb93427d39b69ca6b009049e9a","unresolved":true,"context_lines":[{"line_number":185,"context_line":"        :param shared: Boolean indicating whether to take a shared or exclusive"},{"line_number":186,"context_line":"                       lock. Default: False."},{"line_number":187,"context_line":"        :param purpose: human-readable purpose to put to debug logs."},{"line_number":188,"context_line":"        :param retry_lock: whether to retry locking if it fails. Default: True."},{"line_number":189,"context_line":"        :param patient: whether to indefinitely retry locking if it fails."},{"line_number":190,"context_line":"                        Set this to True if there is an operation that does not"},{"line_number":191,"context_line":"                        have any fallback or built-in retry mechanism, such as"}],"source_content_type":"text/x-python","patch_set":27,"id":"c5eba8af_4b558971","line":188,"range":{"start_line":188,"start_character":15,"end_line":188,"end_character":25},"updated":"2020-12-04 02:27:45.000000000","message":"I guess its a more accurate argument name now, was that the only reason to make this change?\n\nIf its clashing with the retry import you could just import tenacity, @tenacity.retry","commit_id":"47d6acf5d4aa1c2e1196b9b01ba98574452bd487"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"718f0b041e398bc318177e9ad660b1ffa200a945","unresolved":true,"context_lines":[{"line_number":185,"context_line":"        :param shared: Boolean indicating whether to take a shared or exclusive"},{"line_number":186,"context_line":"                       lock. Default: False."},{"line_number":187,"context_line":"        :param purpose: human-readable purpose to put to debug logs."},{"line_number":188,"context_line":"        :param retry_lock: whether to retry locking if it fails. Default: True."},{"line_number":189,"context_line":"        :param patient: whether to indefinitely retry locking if it fails."},{"line_number":190,"context_line":"                        Set this to True if there is an operation that does not"},{"line_number":191,"context_line":"                        have any fallback or built-in retry mechanism, such as"}],"source_content_type":"text/x-python","patch_set":27,"id":"29c10ca3_b92a1f80","line":188,"range":{"start_line":188,"start_character":15,"end_line":188,"end_character":25},"in_reply_to":"c5eba8af_4b558971","updated":"2020-12-08 10:51:39.000000000","message":"both reasons, I know I could use @tenacity.retry, but since the parameter name was a bit vague, I went for the change anyway","commit_id":"47d6acf5d4aa1c2e1196b9b01ba98574452bd487"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"ff14c1af02c3857a7378059cc71cd7c47d00df29","unresolved":true,"context_lines":[{"line_number":109,"context_line":"from oslo_utils import excutils"},{"line_number":110,"context_line":"from oslo_utils import timeutils"},{"line_number":111,"context_line":"import tenacity"},{"line_number":112,"context_line":"from tenacity import retry"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"from ironic.common import driver_factory"},{"line_number":115,"context_line":"from ironic.common import exception"}],"source_content_type":"text/x-python","patch_set":32,"id":"a44d2631_fcd1501b","line":112,"updated":"2021-01-14 11:53:04.000000000","message":"is there a reason to import like this? it just forcing the rename of retry-\u003eretry_lock...","commit_id":"e6bdcca04d2c9f21f7e17b80f944a70c451a509c"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"c64093a2f8e137c9fd0f37ebc25b874fddef7849","unresolved":false,"context_lines":[{"line_number":109,"context_line":"from oslo_utils import excutils"},{"line_number":110,"context_line":"from oslo_utils import timeutils"},{"line_number":111,"context_line":"import tenacity"},{"line_number":112,"context_line":"from tenacity import retry"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"from ironic.common import driver_factory"},{"line_number":115,"context_line":"from ironic.common import exception"}],"source_content_type":"text/x-python","patch_set":32,"id":"be483576_a5964435","line":112,"in_reply_to":"5135d133_e46ed361","updated":"2021-01-18 13:24:02.000000000","message":"Done","commit_id":"e6bdcca04d2c9f21f7e17b80f944a70c451a509c"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"1ae1127e9f0c6c97f3817ab0c7cebe9e60b7aa90","unresolved":true,"context_lines":[{"line_number":109,"context_line":"from oslo_utils import excutils"},{"line_number":110,"context_line":"from oslo_utils import timeutils"},{"line_number":111,"context_line":"import tenacity"},{"line_number":112,"context_line":"from tenacity import retry"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"from ironic.common import driver_factory"},{"line_number":115,"context_line":"from ironic.common import exception"}],"source_content_type":"text/x-python","patch_set":32,"id":"f189912d_7ab24e4b","line":112,"in_reply_to":"a44d2631_fcd1501b","updated":"2021-01-15 09:45:03.000000000","message":"there was another comment about this, I wanted to rename retry to retry_lock because I thought it was a bit vague, the fact that this import is forcing the change is a lucky coincidence :)\nI can change the import and just use @tenacity.retry, but I think the rename of retry to retry_lock should stay.\nLet\u0027s see also what others think","commit_id":"e6bdcca04d2c9f21f7e17b80f944a70c451a509c"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"10a5f9defbd955a94b6cfe9af4996d5e17d6d349","unresolved":true,"context_lines":[{"line_number":109,"context_line":"from oslo_utils import excutils"},{"line_number":110,"context_line":"from oslo_utils import timeutils"},{"line_number":111,"context_line":"import tenacity"},{"line_number":112,"context_line":"from tenacity import retry"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"from ironic.common import driver_factory"},{"line_number":115,"context_line":"from ironic.common import exception"}],"source_content_type":"text/x-python","patch_set":32,"id":"5135d133_e46ed361","line":112,"in_reply_to":"acf186e6_eea43bcc","updated":"2021-01-18 10:01:58.000000000","message":"I guess if I got already two comments about this it\u0027s not a very good choice!\nI\u0027ll remove the \"retry_lock\" change, maybe add it in a different patch, and just stick to the tenacity change.","commit_id":"e6bdcca04d2c9f21f7e17b80f944a70c451a509c"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"89ea366d07fd1fe8a904e055c69075c2b38fc1a5","unresolved":true,"context_lines":[{"line_number":109,"context_line":"from oslo_utils import excutils"},{"line_number":110,"context_line":"from oslo_utils import timeutils"},{"line_number":111,"context_line":"import tenacity"},{"line_number":112,"context_line":"from tenacity import retry"},{"line_number":113,"context_line":""},{"line_number":114,"context_line":"from ironic.common import driver_factory"},{"line_number":115,"context_line":"from ironic.common import exception"}],"source_content_type":"text/x-python","patch_set":32,"id":"acf186e6_eea43bcc","line":112,"in_reply_to":"f189912d_7ab24e4b","updated":"2021-01-15 16:34:25.000000000","message":"ok, I don\u0027t really have a problem with the \"retry_lock\" rename, although it seems unrelated to this patch. I guess I just thought it looked weird that we had \"from tenacity import retry\" only in this file and one other(ironic/common/neutron.py) when there is no need.","commit_id":"e6bdcca04d2c9f21f7e17b80f944a70c451a509c"}],"ironic/drivers/modules/agent_base.py":[{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"6a68e8635cf6b7b368b01414112d0cffcfb8b1d3","unresolved":true,"context_lines":[{"line_number":1173,"context_line":""},{"line_number":1174,"context_line":"        @tenacity.retry(stop\u003dtenacity.stop_after_attempt(attempts),"},{"line_number":1175,"context_line":"                        retry\u003dtenacity.retry_if_result("},{"line_number":1176,"context_line":"                            lambda state: state !\u003d states.POWER_OFF),"},{"line_number":1177,"context_line":"                        wait\u003dtenacity.wait_fixed(wait))"},{"line_number":1178,"context_line":"        def _wait_until_powered_off(task):"},{"line_number":1179,"context_line":"            return task.driver.power.get_power_state(task)"}],"source_content_type":"text/x-python","patch_set":33,"id":"3ef03ab4_4845a4aa","line":1176,"updated":"2021-01-18 15:55:49.000000000","message":"I think we also need \"| tenacity.retry_if_exception_type(Exception))\" here to catch exceptions","commit_id":"faac55925c99b7d1ffe38a86dcc2df1660ac0685"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"8425b43243ae4379c986935455feba046913a9e4","unresolved":true,"context_lines":[{"line_number":1173,"context_line":""},{"line_number":1174,"context_line":"        @tenacity.retry(stop\u003dtenacity.stop_after_attempt(attempts),"},{"line_number":1175,"context_line":"                        retry\u003dtenacity.retry_if_result("},{"line_number":1176,"context_line":"                            lambda state: state !\u003d states.POWER_OFF),"},{"line_number":1177,"context_line":"                        wait\u003dtenacity.wait_fixed(wait))"},{"line_number":1178,"context_line":"        def _wait_until_powered_off(task):"},{"line_number":1179,"context_line":"            return task.driver.power.get_power_state(task)"}],"source_content_type":"text/x-python","patch_set":33,"id":"ce5e11f8_0aacda34","line":1176,"in_reply_to":"3ef03ab4_4845a4aa","updated":"2021-01-19 13:45:08.000000000","message":"I added it but forgot to add it to the commit... thanks!","commit_id":"faac55925c99b7d1ffe38a86dcc2df1660ac0685"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"4b717013b20bd80dcb2a56cdd9c215871e2e7741","unresolved":false,"context_lines":[{"line_number":1175,"context_line":"                        retry\u003d(tenacity.retry_if_result("},{"line_number":1176,"context_line":"                            lambda state: state !\u003d states.POWER_OFF)"},{"line_number":1177,"context_line":"                            | tenacity.retry_if_exception_type(Exception)),"},{"line_number":1178,"context_line":"                        wait\u003dtenacity.wait_fixed(wait))"},{"line_number":1179,"context_line":"        def _wait_until_powered_off(task):"},{"line_number":1180,"context_line":"            return task.driver.power.get_power_state(task)"},{"line_number":1181,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"4a3959da_62bd13cc","line":1178,"updated":"2021-02-11 11:52:29.000000000","message":"missing reraise\u003dTrue","commit_id":"e98fa755f3f03fd0cfa23e4c8b7944ee164b958c"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"8a594aa0b0a3ae8fa75147641b99215c9999ccad","unresolved":false,"context_lines":[{"line_number":1175,"context_line":"                        retry\u003d(tenacity.retry_if_result("},{"line_number":1176,"context_line":"                            lambda state: state !\u003d states.POWER_OFF)"},{"line_number":1177,"context_line":"                            | tenacity.retry_if_exception_type(Exception)),"},{"line_number":1178,"context_line":"                        wait\u003dtenacity.wait_fixed(wait))"},{"line_number":1179,"context_line":"        def _wait_until_powered_off(task):"},{"line_number":1180,"context_line":"            return task.driver.power.get_power_state(task)"},{"line_number":1181,"context_line":""}],"source_content_type":"text/x-python","patch_set":36,"id":"adcc959a_efb4ac80","line":1178,"in_reply_to":"4a3959da_62bd13cc","updated":"2021-02-12 13:40:16.000000000","message":"oh snap! Thanks :/","commit_id":"e98fa755f3f03fd0cfa23e4c8b7944ee164b958c"}],"ironic/drivers/modules/agent_client.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"7f199828d50d1266a9f53e4836a61f169a78f71e","unresolved":false,"context_lines":[{"line_number":283,"context_line":"                raise exception.AgentConnectionFailed(reason\u003dmsg)"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        if retry_connection:"},{"line_number":286,"context_line":"            _get \u003d tenacity.retry("},{"line_number":287,"context_line":"                retry\u003dtenacity.retry_if_exception_type("},{"line_number":288,"context_line":"                    exception.AgentConnectionFailed),"},{"line_number":289,"context_line":"                stop\u003dtenacity.stop_after_attempt("}],"source_content_type":"text/x-python","patch_set":6,"id":"9f560f44_9d8fa32d","line":286,"updated":"2020-08-11 12:24:29.000000000","message":"pep8: F811 redefinition of unused \u0027_get\u0027 from line 271","commit_id":"8f2e72f10e5ba400e0724c20f91d65d381157e11"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"ff14c1af02c3857a7378059cc71cd7c47d00df29","unresolved":true,"context_lines":[{"line_number":107,"context_line":"        retry\u003dtenacity.retry_if_exception_type("},{"line_number":108,"context_line":"            exception.AgentCommandTimeout),"},{"line_number":109,"context_line":"        stop\u003dtenacity.stop_after_attempt(CONF.agent.max_command_attempts),"},{"line_number":110,"context_line":"        reraise\u003dTrue)"},{"line_number":111,"context_line":"    def _wait_for_command(self, node, method):"},{"line_number":112,"context_line":"        \"\"\"Wait for a command to complete."},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"12b0ef8a_dd803644","line":110,"updated":"2021-01-14 11:53:04.000000000","message":"Is wait_fixed\u003dCONF.agent.command_wait_interval needed here?","commit_id":"e6bdcca04d2c9f21f7e17b80f944a70c451a509c"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"1ae1127e9f0c6c97f3817ab0c7cebe9e60b7aa90","unresolved":true,"context_lines":[{"line_number":107,"context_line":"        retry\u003dtenacity.retry_if_exception_type("},{"line_number":108,"context_line":"            exception.AgentCommandTimeout),"},{"line_number":109,"context_line":"        stop\u003dtenacity.stop_after_attempt(CONF.agent.max_command_attempts),"},{"line_number":110,"context_line":"        reraise\u003dTrue)"},{"line_number":111,"context_line":"    def _wait_for_command(self, node, method):"},{"line_number":112,"context_line":"        \"\"\"Wait for a command to complete."},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"4f9d05e9_bac3b6ef","line":110,"in_reply_to":"12b0ef8a_dd803644","updated":"2021-01-15 09:45:03.000000000","message":"yeah.... there should be a wait parameter here, thanks!","commit_id":"e6bdcca04d2c9f21f7e17b80f944a70c451a509c"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"c64093a2f8e137c9fd0f37ebc25b874fddef7849","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        retry\u003dtenacity.retry_if_exception_type("},{"line_number":108,"context_line":"            exception.AgentCommandTimeout),"},{"line_number":109,"context_line":"        stop\u003dtenacity.stop_after_attempt(CONF.agent.max_command_attempts),"},{"line_number":110,"context_line":"        reraise\u003dTrue)"},{"line_number":111,"context_line":"    def _wait_for_command(self, node, method):"},{"line_number":112,"context_line":"        \"\"\"Wait for a command to complete."},{"line_number":113,"context_line":""}],"source_content_type":"text/x-python","patch_set":32,"id":"8a0b0d50_dcc5faa3","line":110,"in_reply_to":"4f9d05e9_bac3b6ef","updated":"2021-01-18 13:24:02.000000000","message":"Done","commit_id":"e6bdcca04d2c9f21f7e17b80f944a70c451a509c"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"6a68e8635cf6b7b368b01414112d0cffcfb8b1d3","unresolved":true,"context_lines":[{"line_number":106,"context_line":"    @tenacity.retry("},{"line_number":107,"context_line":"        retry\u003dtenacity.retry_if_exception_type("},{"line_number":108,"context_line":"            exception.AgentCommandTimeout),"},{"line_number":109,"context_line":"        stop\u003dtenacity.stop_after_attempt(CONF.agent.max_command_attempts),"},{"line_number":110,"context_line":"        wait\u003dtenacity.wait_fixed(CONF.agent.command_wait_interval),"},{"line_number":111,"context_line":"        reraise\u003dTrue)"},{"line_number":112,"context_line":"    def _wait_for_command(self, node, method):"}],"source_content_type":"text/x-python","patch_set":33,"id":"fff059b6_a073dffd","line":109,"updated":"2021-01-18 15:55:49.000000000","message":"This was using CONF.agent.command_wait_attempts","commit_id":"faac55925c99b7d1ffe38a86dcc2df1660ac0685"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"8425b43243ae4379c986935455feba046913a9e4","unresolved":true,"context_lines":[{"line_number":106,"context_line":"    @tenacity.retry("},{"line_number":107,"context_line":"        retry\u003dtenacity.retry_if_exception_type("},{"line_number":108,"context_line":"            exception.AgentCommandTimeout),"},{"line_number":109,"context_line":"        stop\u003dtenacity.stop_after_attempt(CONF.agent.max_command_attempts),"},{"line_number":110,"context_line":"        wait\u003dtenacity.wait_fixed(CONF.agent.command_wait_interval),"},{"line_number":111,"context_line":"        reraise\u003dTrue)"},{"line_number":112,"context_line":"    def _wait_for_command(self, node, method):"}],"source_content_type":"text/x-python","patch_set":33,"id":"edb694d2_b86b3d2b","line":109,"in_reply_to":"fff059b6_a073dffd","updated":"2021-01-19 13:45:08.000000000","message":"yay for typos! thanks!","commit_id":"faac55925c99b7d1ffe38a86dcc2df1660ac0685"}],"ironic/drivers/modules/agent_power.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"5350a1dcf40ad24800a30bcc5d543b15e02f26e7","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        @tenacity.retry("},{"line_number":183,"context_line":"            stop\u003dtenacity.stop_after_delay(timeout),"},{"line_number":184,"context_line":"            retry\u003d(tenacity.retry_if_result(lambda result: not result) |"},{"line_number":185,"context_line":"                   tenacity.retry_if_exception_type("},{"line_number":186,"context_line":"                       exception.AgentConnectionFailed)),"},{"line_number":187,"context_line":"            reraise\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9f560f44_ba7b57bc","line":184,"updated":"2020-09-01 11:48:11.000000000","message":"pep8: W504 line break after binary operator","commit_id":"6f3c8f4d9091f8a01ad5e924f5ea2e3f7a2389c4"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"8229ff42de380930dc18ff40ed75ee91c3ea1739","unresolved":false,"context_lines":[{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        @tenacity.retry("},{"line_number":183,"context_line":"            stop\u003dtenacity.stop_after_delay(timeout),"},{"line_number":184,"context_line":"            retry\u003d(tenacity.retry_if_result(lambda result: not result) |"},{"line_number":185,"context_line":"                   tenacity.retry_if_exception_type("},{"line_number":186,"context_line":"                       exception.AgentConnectionFailed)),"},{"line_number":187,"context_line":"            reraise\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9f560f44_d081d94f","line":184,"updated":"2020-08-31 16:36:16.000000000","message":"pep8: W504 line break after binary operator","commit_id":"6f3c8f4d9091f8a01ad5e924f5ea2e3f7a2389c4"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"ff14c1af02c3857a7378059cc71cd7c47d00df29","unresolved":true,"context_lines":[{"line_number":184,"context_line":"            retry\u003d(tenacity.retry_if_result(lambda result: not result)"},{"line_number":185,"context_line":"                   | tenacity.retry_if_exception_type("},{"line_number":186,"context_line":"                exception.AgentConnectionFailed)),"},{"line_number":187,"context_line":"            reraise\u003dTrue)"},{"line_number":188,"context_line":"        def _wait_until_rebooted(task):"},{"line_number":189,"context_line":"            try:"},{"line_number":190,"context_line":"                status \u003d self._client.get_commands_status("}],"source_content_type":"text/x-python","patch_set":32,"id":"af6f3240_ef261b21","line":187,"updated":"2021-01-14 11:53:04.000000000","message":"Is \"wait\u003dtenacity.wait_fixed(wait)\" needed  here?","commit_id":"e6bdcca04d2c9f21f7e17b80f944a70c451a509c"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"c64093a2f8e137c9fd0f37ebc25b874fddef7849","unresolved":false,"context_lines":[{"line_number":184,"context_line":"            retry\u003d(tenacity.retry_if_result(lambda result: not result)"},{"line_number":185,"context_line":"                   | tenacity.retry_if_exception_type("},{"line_number":186,"context_line":"                exception.AgentConnectionFailed)),"},{"line_number":187,"context_line":"            reraise\u003dTrue)"},{"line_number":188,"context_line":"        def _wait_until_rebooted(task):"},{"line_number":189,"context_line":"            try:"},{"line_number":190,"context_line":"                status \u003d self._client.get_commands_status("}],"source_content_type":"text/x-python","patch_set":32,"id":"a8aefebc_7c4cb2d8","line":187,"in_reply_to":"36d7fa1b_d35da9f3","updated":"2021-01-18 13:24:02.000000000","message":"Done","commit_id":"e6bdcca04d2c9f21f7e17b80f944a70c451a509c"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"1ae1127e9f0c6c97f3817ab0c7cebe9e60b7aa90","unresolved":true,"context_lines":[{"line_number":184,"context_line":"            retry\u003d(tenacity.retry_if_result(lambda result: not result)"},{"line_number":185,"context_line":"                   | tenacity.retry_if_exception_type("},{"line_number":186,"context_line":"                exception.AgentConnectionFailed)),"},{"line_number":187,"context_line":"            reraise\u003dTrue)"},{"line_number":188,"context_line":"        def _wait_until_rebooted(task):"},{"line_number":189,"context_line":"            try:"},{"line_number":190,"context_line":"                status \u003d self._client.get_commands_status("}],"source_content_type":"text/x-python","patch_set":32,"id":"36d7fa1b_d35da9f3","line":187,"in_reply_to":"af6f3240_ef261b21","updated":"2021-01-15 09:45:03.000000000","message":"oh gosh, second time I missed it, thanks","commit_id":"e6bdcca04d2c9f21f7e17b80f944a70c451a509c"}],"ironic/drivers/modules/ansible/deploy.py":[{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"ff14c1af02c3857a7378059cc71cd7c47d00df29","unresolved":true,"context_lines":[{"line_number":631,"context_line":"            stop\u003dtenacity.stop_after_attempt(attempts),"},{"line_number":632,"context_line":"            retry\u003dtenacity.retry_if_result("},{"line_number":633,"context_line":"                lambda state: state !\u003d states.POWER_OFF),"},{"line_number":634,"context_line":"            wait\u003dtenacity.wait_fixed(wait)"},{"line_number":635,"context_line":"        )"},{"line_number":636,"context_line":"        def _wait_until_powered_off(task):"},{"line_number":637,"context_line":"            return task.driver.power.get_power_state(task)"}],"source_content_type":"text/x-python","patch_set":32,"id":"7e848b50_c8b53733","line":634,"updated":"2021-01-14 11:53:04.000000000","message":"Any exceptions will be getting wrapped here, is that intensional?","commit_id":"e6bdcca04d2c9f21f7e17b80f944a70c451a509c"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"c64093a2f8e137c9fd0f37ebc25b874fddef7849","unresolved":false,"context_lines":[{"line_number":631,"context_line":"            stop\u003dtenacity.stop_after_attempt(attempts),"},{"line_number":632,"context_line":"            retry\u003dtenacity.retry_if_result("},{"line_number":633,"context_line":"                lambda state: state !\u003d states.POWER_OFF),"},{"line_number":634,"context_line":"            wait\u003dtenacity.wait_fixed(wait)"},{"line_number":635,"context_line":"        )"},{"line_number":636,"context_line":"        def _wait_until_powered_off(task):"},{"line_number":637,"context_line":"            return task.driver.power.get_power_state(task)"}],"source_content_type":"text/x-python","patch_set":32,"id":"40a7f26c_049d5332","line":634,"in_reply_to":"1433b325_e44e264a","updated":"2021-01-18 13:24:02.000000000","message":"Done","commit_id":"e6bdcca04d2c9f21f7e17b80f944a70c451a509c"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"10a5f9defbd955a94b6cfe9af4996d5e17d6d349","unresolved":true,"context_lines":[{"line_number":631,"context_line":"            stop\u003dtenacity.stop_after_attempt(attempts),"},{"line_number":632,"context_line":"            retry\u003dtenacity.retry_if_result("},{"line_number":633,"context_line":"                lambda state: state !\u003d states.POWER_OFF),"},{"line_number":634,"context_line":"            wait\u003dtenacity.wait_fixed(wait)"},{"line_number":635,"context_line":"        )"},{"line_number":636,"context_line":"        def _wait_until_powered_off(task):"},{"line_number":637,"context_line":"            return task.driver.power.get_power_state(task)"}],"source_content_type":"text/x-python","patch_set":32,"id":"1433b325_e44e264a","line":634,"in_reply_to":"7c9627ce_2ae5607b","updated":"2021-01-18 10:01:58.000000000","message":"oh yeah, true, I will add that, thanks!","commit_id":"e6bdcca04d2c9f21f7e17b80f944a70c451a509c"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"1ae1127e9f0c6c97f3817ab0c7cebe9e60b7aa90","unresolved":true,"context_lines":[{"line_number":631,"context_line":"            stop\u003dtenacity.stop_after_attempt(attempts),"},{"line_number":632,"context_line":"            retry\u003dtenacity.retry_if_result("},{"line_number":633,"context_line":"                lambda state: state !\u003d states.POWER_OFF),"},{"line_number":634,"context_line":"            wait\u003dtenacity.wait_fixed(wait)"},{"line_number":635,"context_line":"        )"},{"line_number":636,"context_line":"        def _wait_until_powered_off(task):"},{"line_number":637,"context_line":"            return task.driver.power.get_power_state(task)"}],"source_content_type":"text/x-python","patch_set":32,"id":"e486a2d9_4e5e5093","line":634,"in_reply_to":"7e848b50_c8b53733","updated":"2021-01-15 09:45:03.000000000","message":"we\u0027re not retrying based on exception here, not sure what you mean","commit_id":"e6bdcca04d2c9f21f7e17b80f944a70c451a509c"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"89ea366d07fd1fe8a904e055c69075c2b38fc1a5","unresolved":true,"context_lines":[{"line_number":631,"context_line":"            stop\u003dtenacity.stop_after_attempt(attempts),"},{"line_number":632,"context_line":"            retry\u003dtenacity.retry_if_result("},{"line_number":633,"context_line":"                lambda state: state !\u003d states.POWER_OFF),"},{"line_number":634,"context_line":"            wait\u003dtenacity.wait_fixed(wait)"},{"line_number":635,"context_line":"        )"},{"line_number":636,"context_line":"        def _wait_until_powered_off(task):"},{"line_number":637,"context_line":"            return task.driver.power.get_power_state(task)"}],"source_content_type":"text/x-python","patch_set":32,"id":"7c9627ce_2ae5607b","line":634,"in_reply_to":"e486a2d9_4e5e5093","updated":"2021-01-15 16:34:25.000000000","message":"Sorry my fault I meant to say exceptions would be ignored (not wrapped), if _wait_until_powered_off throws an exception then it wont be retried as its only retrying on result, the behaviour of the old version is that exceptions would trigger a retry.\n\nTo have the same behaviour you need to update the retry parameter to include\nretry\u003d....|tenacity.retry_if_exception_type()","commit_id":"e6bdcca04d2c9f21f7e17b80f944a70c451a509c"},{"author":{"_account_id":11076,"name":"Shivanand Tendulker","email":"stendulker@gmail.com","username":"stendulker"},"change_message_id":"02773598a4a2a9b106ebf60cd799d048efc093f7","unresolved":true,"context_lines":[{"line_number":631,"context_line":"            stop\u003dtenacity.stop_after_attempt(attempts),"},{"line_number":632,"context_line":"            retry\u003d(tenacity.retry_if_result("},{"line_number":633,"context_line":"                lambda state: state !\u003d states.POWER_OFF)"},{"line_number":634,"context_line":"                | tenacity.retry_if_exception_type(Exception)),"},{"line_number":635,"context_line":"            wait\u003dtenacity.wait_fixed(wait)"},{"line_number":636,"context_line":"        )"},{"line_number":637,"context_line":"        def _wait_until_powered_off(task):"}],"source_content_type":"text/x-python","patch_set":36,"id":"b4217b22_341f83f6","line":634,"range":{"start_line":634,"start_character":17,"end_line":634,"end_character":62},"updated":"2021-02-11 11:41:10.000000000","message":"Why is this required? \u0027retrying\u0027 did not set \u0027retry_on_exception\u0027","commit_id":"e98fa755f3f03fd0cfa23e4c8b7944ee164b958c"},{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"14c434831695ac5c1c8d301e4653781610272221","unresolved":true,"context_lines":[{"line_number":631,"context_line":"            stop\u003dtenacity.stop_after_attempt(attempts),"},{"line_number":632,"context_line":"            retry\u003d(tenacity.retry_if_result("},{"line_number":633,"context_line":"                lambda state: state !\u003d states.POWER_OFF)"},{"line_number":634,"context_line":"                | tenacity.retry_if_exception_type(Exception)),"},{"line_number":635,"context_line":"            wait\u003dtenacity.wait_fixed(wait)"},{"line_number":636,"context_line":"        )"},{"line_number":637,"context_line":"        def _wait_until_powered_off(task):"}],"source_content_type":"text/x-python","patch_set":36,"id":"d07cd4ec_65f613a7","line":634,"range":{"start_line":634,"start_character":17,"end_line":634,"end_character":62},"in_reply_to":"b4217b22_341f83f6","updated":"2021-02-11 12:43:01.000000000","message":"The default behaviour for \u0027retrying\u0027 is to retry on exception, tenacity\u0027s default is the opposite.","commit_id":"e98fa755f3f03fd0cfa23e4c8b7944ee164b958c"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"8a594aa0b0a3ae8fa75147641b99215c9999ccad","unresolved":true,"context_lines":[{"line_number":631,"context_line":"            stop\u003dtenacity.stop_after_attempt(attempts),"},{"line_number":632,"context_line":"            retry\u003d(tenacity.retry_if_result("},{"line_number":633,"context_line":"                lambda state: state !\u003d states.POWER_OFF)"},{"line_number":634,"context_line":"                | tenacity.retry_if_exception_type(Exception)),"},{"line_number":635,"context_line":"            wait\u003dtenacity.wait_fixed(wait)"},{"line_number":636,"context_line":"        )"},{"line_number":637,"context_line":"        def _wait_until_powered_off(task):"}],"source_content_type":"text/x-python","patch_set":36,"id":"48c4e976_52b78940","line":634,"range":{"start_line":634,"start_character":17,"end_line":634,"end_character":62},"in_reply_to":"d07cd4ec_65f613a7","updated":"2021-02-12 13:40:16.000000000","message":"what Derek said :)","commit_id":"e98fa755f3f03fd0cfa23e4c8b7944ee164b958c"}],"ironic/drivers/modules/redfish/boot.py":[{"author":{"_account_id":1926,"name":"Derek Higgins","email":"derekh@redhat.com","username":"derekh"},"change_message_id":"936f9ec4121b17706c895ee1f1f23c3bcda975a7","unresolved":true,"context_lines":[{"line_number":155,"context_line":""},{"line_number":156,"context_line":"@tenacity.retry(retry\u003dtenacity.retry_if_exception(_test_retry),"},{"line_number":157,"context_line":"                stop\u003dtenacity.stop_after_attempt(3),"},{"line_number":158,"context_line":"                wait\u003dtenacity.wait_fixed(2),"},{"line_number":159,"context_line":"                reraise\u003dTrue)"},{"line_number":160,"context_line":"def _insert_vmedia(task, managers, boot_url, boot_device):"},{"line_number":161,"context_line":"    \"\"\"Insert bootable ISO image into virtual CD or DVD"}],"source_content_type":"text/x-python","patch_set":34,"id":"5651af8d_806a5a6b","line":158,"updated":"2021-01-19 17:26:05.000000000","message":"Wait time has changed here from 3 seconds to 2.","commit_id":"12dcc72733a88fb1c7780f5a15b99d3f4afa0bcb"}],"ironic/tests/unit/common/test_glance_service.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"cafa802fbcfa06fb93427d39b69ca6b009049e9a","unresolved":true,"context_lines":[{"line_number":180,"context_line":"            self.assertRaises(exception.ImageUnacceptable,"},{"line_number":181,"context_line":"                              self.service.show, image_id)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    @mock.patch.object(tenacity, \u0027retry\u0027, autospec\u003dTrue)"},{"line_number":184,"context_line":"    def test_download_with_retries(self, mock_retry):"},{"line_number":185,"context_line":"        tries \u003d [0]"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"bb017851_4f66505b","line":183,"updated":"2020-12-04 02:27:45.000000000","message":"FYI if you want to actually run the retries without any sleep time penalties then this is how I found how to mock out the sleep:\n\nhttps://opendev.org/openstack/tripleo-common/src/branch/master/tripleo_common/tests/image/test_image_uploader.py#L493\n\nSo in theory you could do that here with:\n\n    stub_service.download.retry.sleep \u003d mock.Mock()","commit_id":"47d6acf5d4aa1c2e1196b9b01ba98574452bd487"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"718f0b041e398bc318177e9ad660b1ffa200a945","unresolved":true,"context_lines":[{"line_number":180,"context_line":"            self.assertRaises(exception.ImageUnacceptable,"},{"line_number":181,"context_line":"                              self.service.show, image_id)"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"    @mock.patch.object(tenacity, \u0027retry\u0027, autospec\u003dTrue)"},{"line_number":184,"context_line":"    def test_download_with_retries(self, mock_retry):"},{"line_number":185,"context_line":"        tries \u003d [0]"},{"line_number":186,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"90bce560_54b723c3","line":183,"in_reply_to":"bb017851_4f66505b","updated":"2020-12-08 10:51:39.000000000","message":"interesting, I tried basically the same thing and it was ignoring the mock and just sleeping through.\nI\u0027ll give it another try.","commit_id":"47d6acf5d4aa1c2e1196b9b01ba98574452bd487"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a192ec365e2c55cc32d9d476950d616728411b0c","unresolved":true,"context_lines":[{"line_number":215,"context_line":"                                                        stub_context)"},{"line_number":216,"context_line":"        tries \u003d [0]"},{"line_number":217,"context_line":"        stub_service.download(image_id, writer)"},{"line_number":218,"context_line":"        mock_retry.assert_called_once()"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def test_download_no_data(self):"},{"line_number":221,"context_line":"        self.client.fake_wrapped \u003d None"}],"source_content_type":"text/x-python","patch_set":29,"id":"fbeb8d61_2043e610","line":218,"updated":"2020-12-11 03:41:56.000000000","message":"if you\u0027re mocking the actual retry function, aren\u0027t you just asserting here that the @retry was reached when the download function was called?","commit_id":"e294fd26277214103249d627247c512bb521d047"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"134b50ea778009663d562f41226ff67723ed42b2","unresolved":true,"context_lines":[{"line_number":215,"context_line":"                                                        stub_context)"},{"line_number":216,"context_line":"        tries \u003d [0]"},{"line_number":217,"context_line":"        stub_service.download(image_id, writer)"},{"line_number":218,"context_line":"        mock_retry.assert_called_once()"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"    def test_download_no_data(self):"},{"line_number":221,"context_line":"        self.client.fake_wrapped \u003d None"}],"source_content_type":"text/x-python","patch_set":29,"id":"ff9d62e1_dca5acde","line":218,"in_reply_to":"fbeb8d61_2043e610","updated":"2020-12-14 08:48:43.000000000","message":"mmm I\u0027m not sure I get what you mean here, the retry is called in the \"call\" function, not in \"download\" itself","commit_id":"e294fd26277214103249d627247c512bb521d047"}],"ironic/tests/unit/common/test_neutron.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"4698216f01fa313b7fbbe0b11104a8fceee387d2","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from neutronclient.common import exceptions as neutron_client_exc"},{"line_number":21,"context_line":"from neutronclient.v2_0 import client"},{"line_number":22,"context_line":"from oslo_utils import uuidutils"},{"line_number":23,"context_line":"import tenacity"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"from ironic.common import context"},{"line_number":26,"context_line":"from ironic.common import exception"}],"source_content_type":"text/x-python","patch_set":20,"id":"9f560f44_da009803","line":23,"updated":"2020-09-03 16:46:08.000000000","message":"pep8: F401 \u0027tenacity\u0027 imported but unused","commit_id":"ab661b7e68e080e9e369636b594f3f1d90b51008"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"cafa802fbcfa06fb93427d39b69ca6b009049e9a","unresolved":true,"context_lines":[{"line_number":900,"context_line":""},{"line_number":901,"context_line":"    @mock.patch.object(neutron, \u0027_validate_agent\u0027, autospec\u003dTrue)"},{"line_number":902,"context_line":"    def test_wait_for_host_agent_up_target_state_down("},{"line_number":903,"context_line":"            self, validate_agent_mock):"},{"line_number":904,"context_line":"        neutron.wait_for_host_agent.retry.stop \u003d ("},{"line_number":905,"context_line":"            tenacity.stop_after_attempt(3))"},{"line_number":906,"context_line":"        validate_agent_mock.return_value \u003d True"}],"source_content_type":"text/x-python","patch_set":27,"id":"df5b7c07_25ecc3a1","line":903,"updated":"2020-12-04 02:27:45.000000000","message":"I assume these tests have the sleep penalty now, you could try:\n\n  sleep_mock \u003d mock.Mock()\n  neutron.wait_for_host_agent.retry.sleep \u003d sleep_mock\n\nAnd then maybe put back the old sleep_mock asserts","commit_id":"47d6acf5d4aa1c2e1196b9b01ba98574452bd487"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"718f0b041e398bc318177e9ad660b1ffa200a945","unresolved":true,"context_lines":[{"line_number":900,"context_line":""},{"line_number":901,"context_line":"    @mock.patch.object(neutron, \u0027_validate_agent\u0027, autospec\u003dTrue)"},{"line_number":902,"context_line":"    def test_wait_for_host_agent_up_target_state_down("},{"line_number":903,"context_line":"            self, validate_agent_mock):"},{"line_number":904,"context_line":"        neutron.wait_for_host_agent.retry.stop \u003d ("},{"line_number":905,"context_line":"            tenacity.stop_after_attempt(3))"},{"line_number":906,"context_line":"        validate_agent_mock.return_value \u003d True"}],"source_content_type":"text/x-python","patch_set":27,"id":"27e19aba_ac385782","line":903,"in_reply_to":"df5b7c07_25ecc3a1","updated":"2020-12-08 10:51:39.000000000","message":"yeah, as I wrote in another comment, I tried that but with poor results :/\nI\u0027ll test that again","commit_id":"47d6acf5d4aa1c2e1196b9b01ba98574452bd487"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a192ec365e2c55cc32d9d476950d616728411b0c","unresolved":true,"context_lines":[{"line_number":933,"context_line":"        self.assertEqual(get_port_mock.call_count, 2)"},{"line_number":934,"context_line":""},{"line_number":935,"context_line":"    @mock.patch.object(neutron, \u0027_get_port_by_uuid\u0027, autospec\u003dTrue)"},{"line_number":936,"context_line":"    def test_wait_for_port_status_active_max_retry(self, get_port_mock):"},{"line_number":937,"context_line":"        neutron.wait_for_port_status.retry.stop \u003d ("},{"line_number":938,"context_line":"            tenacity.stop_after_attempt(3))"},{"line_number":939,"context_line":"        get_port_mock.return_value \u003d stubs.FakeNeutronPort(status\u003d\u0027DOWN\u0027)"}],"source_content_type":"text/x-python","patch_set":29,"id":"b1a424f6_dd520919","line":936,"updated":"2020-12-11 03:41:56.000000000","message":"Without sleep mocking, this test takes 20.053977s, and the py38 job is taking 5 minutes longer to run, so we\u0027ll need that sleep mocking","commit_id":"e294fd26277214103249d627247c512bb521d047"}],"ironic/tests/unit/conductor/test_base_manager.py":[{"author":{"_account_id":10343,"name":"Jim Rollenhagen","email":"jim@jimrollenhagen.com","username":"jimrollenhagen"},"change_message_id":"cc1d020546f1c8b9a60da765e5b35b50bfdf81bb","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        with mock.patch.object(self.driver.console,"},{"line_number":241,"context_line":"                               \u0027start_console\u0027) as mock_start_console:"},{"line_number":242,"context_line":"            self.service._start_consoles(self.context)"},{"line_number":243,"context_line":"            self.assertEqual(2, mock_start_console.call_count)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def test__start_consoles_no_console_enabled(self):"},{"line_number":246,"context_line":"        obj_utils.create_test_node(self.context,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_9f119baf","side":"PARENT","line":243,"updated":"2016-10-11 13:22:25.000000000","message":"Why is this test being removed?","commit_id":"446b3de46875fc0e3861088ad426a19a50448652"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"319ce8e3fdb6d5c4a7f6d8aaa5bd71e86c894b1a","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        with mock.patch.object(self.driver.console,"},{"line_number":241,"context_line":"                               \u0027start_console\u0027) as mock_start_console:"},{"line_number":242,"context_line":"            self.service._start_consoles(self.context)"},{"line_number":243,"context_line":"            self.assertEqual(2, mock_start_console.call_count)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def test__start_consoles_no_console_enabled(self):"},{"line_number":246,"context_line":"        obj_utils.create_test_node(self.context,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_a8be07fd","side":"PARENT","line":243,"in_reply_to":"fa6399be_05c5383b","updated":"2016-10-18 20:40:31.000000000","message":"I added it back, but based on my previous comment I\u0027m not sure its needed.","commit_id":"446b3de46875fc0e3861088ad426a19a50448652"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"9031e1f9a1b94e5652b73e20fe4346815d37fe4f","unresolved":false,"context_lines":[{"line_number":240,"context_line":"        with mock.patch.object(self.driver.console,"},{"line_number":241,"context_line":"                               \u0027start_console\u0027) as mock_start_console:"},{"line_number":242,"context_line":"            self.service._start_consoles(self.context)"},{"line_number":243,"context_line":"            self.assertEqual(2, mock_start_console.call_count)"},{"line_number":244,"context_line":""},{"line_number":245,"context_line":"    def test__start_consoles_no_console_enabled(self):"},{"line_number":246,"context_line":"        obj_utils.create_test_node(self.context,"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa6399be_05c5383b","side":"PARENT","line":243,"in_reply_to":"fa6399be_9f119baf","updated":"2016-10-11 13:54:48.000000000","message":"It appears to just be testing the retrying behavior within _start_consoles(). Assuming that\u0027s the case, why do we need to re-test retrying behavior as its already tested as part of tenacity?","commit_id":"446b3de46875fc0e3861088ad426a19a50448652"}],"ironic/tests/unit/drivers/modules/test_agent_client.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"cafa802fbcfa06fb93427d39b69ca6b009049e9a","unresolved":true,"context_lines":[{"line_number":696,"context_line":"        self.client.session \u003d mock.MagicMock(autospec\u003drequests.Session)"},{"line_number":697,"context_line":"        self.node \u003d MockNode()"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"    @mock.patch.object(time, \u0027sleep\u0027, autospec\u003dTrue)"},{"line_number":700,"context_line":"    def test__command_fail_all_attempts(self, mock_sleep):"},{"line_number":701,"context_line":"        mock_sleep.return_value \u003d None"},{"line_number":702,"context_line":"        error \u003d \u0027Connection Timeout\u0027"}],"source_content_type":"text/x-python","patch_set":27,"id":"b744da26_bc2535f3","line":699,"updated":"2020-12-04 02:27:45.000000000","message":"I wonder if this would work to have a more specific sleep mock:\n\n  @mock.patch.object(tenacity.retry, \u0027sleep\u0027, autospec\u003dTrue)","commit_id":"47d6acf5d4aa1c2e1196b9b01ba98574452bd487"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"718f0b041e398bc318177e9ad660b1ffa200a945","unresolved":true,"context_lines":[{"line_number":696,"context_line":"        self.client.session \u003d mock.MagicMock(autospec\u003drequests.Session)"},{"line_number":697,"context_line":"        self.node \u003d MockNode()"},{"line_number":698,"context_line":""},{"line_number":699,"context_line":"    @mock.patch.object(time, \u0027sleep\u0027, autospec\u003dTrue)"},{"line_number":700,"context_line":"    def test__command_fail_all_attempts(self, mock_sleep):"},{"line_number":701,"context_line":"        mock_sleep.return_value \u003d None"},{"line_number":702,"context_line":"        error \u003d \u0027Connection Timeout\u0027"}],"source_content_type":"text/x-python","patch_set":27,"id":"5e92fc1d_bb376800","line":699,"in_reply_to":"b744da26_bc2535f3","updated":"2020-12-08 10:51:39.000000000","message":"mmm I think something went wrong in the rebase, this should not be here, at least not in this form.\nThanks for the hint btw!","commit_id":"47d6acf5d4aa1c2e1196b9b01ba98574452bd487"}],"requirements.txt":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"d58c298fe85212af591524dcc0c28c0cabe745be","unresolved":false,"context_lines":[{"line_number":38,"context_line":"Jinja2\u003e\u003d2.8 # BSD License (3 clause)"},{"line_number":39,"context_line":"keystonemiddleware!\u003d4.5.0,\u003e\u003d4.2.0 # Apache-2.0"},{"line_number":40,"context_line":"oslo.messaging\u003e\u003d5.2.0 # Apache-2.0"},{"line_number":41,"context_line":"tenacity\u003e\u003d3.2.1  # Apache-2.0"},{"line_number":42,"context_line":"oslo.versionedobjects\u003e\u003d1.13.0 # Apache-2.0"},{"line_number":43,"context_line":"jsonschema!\u003d2.5.0,\u003c3.0.0,\u003e\u003d2.0.0 # MIT"},{"line_number":44,"context_line":"psutil\u003c2.0.0,\u003e\u003d1.1.1 # BSD"}],"source_content_type":"text/plain","patch_set":4,"id":"da6895a0_d33b2c9b","line":41,"updated":"2016-10-20 21:20:16.000000000","message":"The entry has to exactly match openstack/requirements global-requirements.txt (this is why CI failed)\n\nIf you need a newer version, it has to be updated there first.","commit_id":"d2d8fb29d41ad132604821a97f1c5d25e3b51cae"},{"author":{"_account_id":5367,"name":"boden","email":"bodenvmw@gmail.com","username":"boden"},"change_message_id":"a5fe93026ae4fb190a7573746f9fdb3475155e00","unresolved":false,"context_lines":[{"line_number":38,"context_line":"Jinja2\u003e\u003d2.8 # BSD License (3 clause)"},{"line_number":39,"context_line":"keystonemiddleware!\u003d4.5.0,\u003e\u003d4.2.0 # Apache-2.0"},{"line_number":40,"context_line":"oslo.messaging\u003e\u003d5.2.0 # Apache-2.0"},{"line_number":41,"context_line":"tenacity\u003e\u003d3.2.1  # Apache-2.0"},{"line_number":42,"context_line":"oslo.versionedobjects\u003e\u003d1.13.0 # Apache-2.0"},{"line_number":43,"context_line":"jsonschema!\u003d2.5.0,\u003c3.0.0,\u003e\u003d2.0.0 # MIT"},{"line_number":44,"context_line":"psutil\u003c2.0.0,\u003e\u003d1.1.1 # BSD"}],"source_content_type":"text/plain","patch_set":4,"id":"da6895a0_95f86e4b","line":41,"in_reply_to":"da6895a0_d33b2c9b","updated":"2016-10-24 14:40:10.000000000","message":"My bad; https://review.openstack.org/#/c/390363/","commit_id":"d2d8fb29d41ad132604821a97f1c5d25e3b51cae"}]}
