)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5f3720b918af662a3238ddcb38190112d37ac2a5","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Both \u0027InstanceHelperMixin\u0027 and \u0027ServersTestBase\u0027 provide implementations"},{"line_number":10,"context_line":"of \u0027_wait_for_state_change\u0027 but they behave differently. The former"},{"line_number":11,"context_line":"waits for an instance to transition *from* the provided state, while the"},{"line_number":12,"context_line":"latter, somewhat more sanely, wait for the transition *to* the provided"},{"line_number":13,"context_line":"state. Switch to using the latter everywhere and make the necessary"},{"line_number":14,"context_line":"changes."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3fa7e38b_bc8003c1","line":12,"range":{"start_line":12,"start_character":30,"end_line":12,"end_character":34},"updated":"2019-11-14 22:16:19.000000000","message":"waits","commit_id":"fd5bd95a8c824f5d776973801b21491e6f301356"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e79cb69d9fba63d18febea8c4adc2489bf403104","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Both \u0027InstanceHelperMixin\u0027 and \u0027ServersTestBase\u0027 provide implementations"},{"line_number":10,"context_line":"of \u0027_wait_for_state_change\u0027 but they behave differently. The former"},{"line_number":11,"context_line":"waits for an instance to transition *from* the provided state, while the"},{"line_number":12,"context_line":"latter, somewhat more sanely, wait for the transition *to* the provided"},{"line_number":13,"context_line":"state. Switch to using the latter everywhere and make the necessary"},{"line_number":14,"context_line":"changes."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3fa7e38b_da4a9581","line":12,"range":{"start_line":12,"start_character":30,"end_line":12,"end_character":34},"in_reply_to":"3fa7e38b_bc8003c1","updated":"2019-11-15 16:13:33.000000000","message":"Done","commit_id":"fd5bd95a8c824f5d776973801b21491e6f301356"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5f3720b918af662a3238ddcb38190112d37ac2a5","unresolved":false,"context_lines":[{"line_number":11,"context_line":"waits for an instance to transition *from* the provided state, while the"},{"line_number":12,"context_line":"latter, somewhat more sanely, wait for the transition *to* the provided"},{"line_number":13,"context_line":"state. Switch to using the latter everywhere and make the necessary"},{"line_number":14,"context_line":"changes."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I80cdc0a33ec27b1389130c22f9c3a8ff69f6b1a0"},{"line_number":17,"context_line":"Signed-off-by: Stephen Finucane \u003csfinucan@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3fa7e38b_dc9fffff","line":14,"updated":"2019-11-14 22:16:19.000000000","message":"This should mention that, due to class hierarchies, we still end up with two nearly identical implementations of _wait_for_state_change, which will be consolidated in a later patch.","commit_id":"fd5bd95a8c824f5d776973801b21491e6f301356"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e79cb69d9fba63d18febea8c4adc2489bf403104","unresolved":false,"context_lines":[{"line_number":11,"context_line":"waits for an instance to transition *from* the provided state, while the"},{"line_number":12,"context_line":"latter, somewhat more sanely, wait for the transition *to* the provided"},{"line_number":13,"context_line":"state. Switch to using the latter everywhere and make the necessary"},{"line_number":14,"context_line":"changes."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I80cdc0a33ec27b1389130c22f9c3a8ff69f6b1a0"},{"line_number":17,"context_line":"Signed-off-by: Stephen Finucane \u003csfinucan@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3fa7e38b_dac5b50b","line":14,"in_reply_to":"3fa7e38b_3ca97323","updated":"2019-11-15 16:13:33.000000000","message":"I\u0027ll comment there but I can\u0027t quite merge them yet since one implementation expects us to pass an API object, while the other uses an instance attribute","commit_id":"fd5bd95a8c824f5d776973801b21491e6f301356"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"8b2638bee31bc74c8bc56efdd2494e2203a6eeb2","unresolved":false,"context_lines":[{"line_number":11,"context_line":"waits for an instance to transition *from* the provided state, while the"},{"line_number":12,"context_line":"latter, somewhat more sanely, wait for the transition *to* the provided"},{"line_number":13,"context_line":"state. Switch to using the latter everywhere and make the necessary"},{"line_number":14,"context_line":"changes."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"Change-Id: I80cdc0a33ec27b1389130c22f9c3a8ff69f6b1a0"},{"line_number":17,"context_line":"Signed-off-by: Stephen Finucane \u003csfinucan@redhat.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3fa7e38b_3ca97323","line":14,"in_reply_to":"3fa7e38b_dc9fffff","updated":"2019-11-14 22:20:22.000000000","message":"...except it\u0027s not (yet): https://review.opendev.org/#/c/689182/4/nova/tests/functional/test_servers.py@79","commit_id":"fd5bd95a8c824f5d776973801b21491e6f301356"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"85e4002e17dc15264224c8ed8914912f7e8647e1","unresolved":false,"context_lines":[{"line_number":7,"context_line":"functional: Make \u0027_wait_for_state_change\u0027 behave consistently"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Both \u0027InstanceHelperMixin\u0027 and \u0027ServersTestBase\u0027 provide implementations"},{"line_number":10,"context_line":"of \u0027_wait_for_state_change\u0027 but they behave differently. The former"},{"line_number":11,"context_line":"waits for an instance to transition *from* the provided state, while the"},{"line_number":12,"context_line":"latter, somewhat more sanely, waits for the transition *to* the provided"},{"line_number":13,"context_line":"state. Switch to using the latter everywhere and make the necessary"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3fa7e38b_fb83c101","line":10,"range":{"start_line":10,"start_character":61,"end_line":10,"end_character":67},"updated":"2019-11-18 17:56:28.000000000","message":"latter","commit_id":"609a5d6a214ab6cbd99d3987bf9e1159a8f8457e"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"98a57cc14eb2c69332f8a9942c41121cfc07a6f3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"functional: Make \u0027_wait_for_state_change\u0027 behave consistently"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Both \u0027InstanceHelperMixin\u0027 and \u0027ServersTestBase\u0027 provide implementations"},{"line_number":10,"context_line":"of \u0027_wait_for_state_change\u0027 but they behave differently. The former"},{"line_number":11,"context_line":"waits for an instance to transition *from* the provided state, while the"},{"line_number":12,"context_line":"latter, somewhat more sanely, waits for the transition *to* the provided"},{"line_number":13,"context_line":"state. Switch to using the latter everywhere and make the necessary"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3fa7e38b_f8741dd2","line":10,"range":{"start_line":10,"start_character":61,"end_line":10,"end_character":67},"in_reply_to":"3fa7e38b_fb83c101","updated":"2019-11-19 09:10:45.000000000","message":"Oh yeah. Done","commit_id":"609a5d6a214ab6cbd99d3987bf9e1159a8f8457e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"85e4002e17dc15264224c8ed8914912f7e8647e1","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Both \u0027InstanceHelperMixin\u0027 and \u0027ServersTestBase\u0027 provide implementations"},{"line_number":10,"context_line":"of \u0027_wait_for_state_change\u0027 but they behave differently. The former"},{"line_number":11,"context_line":"waits for an instance to transition *from* the provided state, while the"},{"line_number":12,"context_line":"latter, somewhat more sanely, waits for the transition *to* the provided"},{"line_number":13,"context_line":"state. Switch to using the latter everywhere and make the necessary"},{"line_number":14,"context_line":"changes. Due to class hierarchies, we end up with two nearly identical"},{"line_number":15,"context_line":"implementations but these will be merged in a future change."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3fa7e38b_9b7c0d21","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":6},"updated":"2019-11-18 17:56:28.000000000","message":"former - InstanceHelperMixin is the sane one.","commit_id":"609a5d6a214ab6cbd99d3987bf9e1159a8f8457e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"85e4002e17dc15264224c8ed8914912f7e8647e1","unresolved":false,"context_lines":[{"line_number":10,"context_line":"of \u0027_wait_for_state_change\u0027 but they behave differently. The former"},{"line_number":11,"context_line":"waits for an instance to transition *from* the provided state, while the"},{"line_number":12,"context_line":"latter, somewhat more sanely, waits for the transition *to* the provided"},{"line_number":13,"context_line":"state. Switch to using the latter everywhere and make the necessary"},{"line_number":14,"context_line":"changes. Due to class hierarchies, we end up with two nearly identical"},{"line_number":15,"context_line":"implementations but these will be merged in a future change."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"3fa7e38b_7b6fd15f","line":13,"range":{"start_line":13,"start_character":27,"end_line":13,"end_character":33},"updated":"2019-11-18 17:56:28.000000000","message":"former - right?","commit_id":"609a5d6a214ab6cbd99d3987bf9e1159a8f8457e"}],"nova/tests/functional/integrated_helpers.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a5fb73813b290b8423af63861be43e594a59bde2","unresolved":false,"context_lines":[{"line_number":74,"context_line":""},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"class InstanceHelperMixin(object):"},{"line_number":77,"context_line":"    def _wait_for_server_parameter(self, admin_api, server, expected_params,"},{"line_number":78,"context_line":"                                   max_retries\u003d10):"},{"line_number":79,"context_line":"        retry_count \u003d 0"},{"line_number":80,"context_line":"        while True:"},{"line_number":81,"context_line":"            server \u003d admin_api.get_server(server[\u0027id\u0027])"},{"line_number":82,"context_line":"            if all([server[attr] \u003d\u003d expected_params[attr]"},{"line_number":83,"context_line":"                    for attr in expected_params]):"},{"line_number":84,"context_line":"                break"},{"line_number":85,"context_line":"            retry_count +\u003d 1"},{"line_number":86,"context_line":"            if retry_count \u003d\u003d max_retries:"},{"line_number":87,"context_line":"                self.fail(\u0027Wait for state change failed, \u0027"},{"line_number":88,"context_line":"                          \u0027expected_params\u003d%s, server\u003d%s\u0027 % ("},{"line_number":89,"context_line":"                              expected_params, server))"},{"line_number":90,"context_line":"            time.sleep(0.5)"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"        return server"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def _wait_for_state_change(self, admin_api, server, expected_status,"},{"line_number":95,"context_line":"                               max_retries\u003d10):"},{"line_number":96,"context_line":"        return self._wait_for_server_parameter("},{"line_number":97,"context_line":"            admin_api, server, {\u0027status\u0027: expected_status}, max_retries)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def _build_minimal_create_server_request(self, api, name, image_uuid\u003dNone,"},{"line_number":100,"context_line":"                                             flavor_id\u003dNone, networks\u003dNone,"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_c9a5f104","line":97,"range":{"start_line":77,"start_character":0,"end_line":97,"end_character":72},"updated":"2019-10-25 19:36:08.000000000","message":"This.","commit_id":"364eaf96095e4eeca795e0e6db03a9d31bb4747f"}],"nova/tests/functional/libvirt/test_numa_servers.py":[{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5f3720b918af662a3238ddcb38190112d37ac2a5","unresolved":false,"context_lines":[{"line_number":582,"context_line":"        created_server1 \u003d self.api.post_server({\u0027server\u0027: server_req})"},{"line_number":583,"context_line":"        # _wait_for_state_change waits for the status to go from BUILD which"},{"line_number":584,"context_line":"        # should then be ACTIVE."},{"line_number":585,"context_line":"        server1 \u003d self._wait_for_state_change(created_server1, \u0027BUILD\u0027)"},{"line_number":586,"context_line":"        self.assertEqual(\u0027ACTIVE\u0027, server1[\u0027status\u0027])"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"        created_server2 \u003d self.api.post_server({\u0027server\u0027: server_req})"},{"line_number":589,"context_line":"        server2 \u003d self._wait_for_state_change(created_server2, \u0027BUILD\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_7c012b39","line":586,"range":{"start_line":585,"start_character":0,"end_line":586,"end_character":53},"updated":"2019-11-14 22:16:19.000000000","message":"missed this (and below)","commit_id":"fd5bd95a8c824f5d776973801b21491e6f301356"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e79cb69d9fba63d18febea8c4adc2489bf403104","unresolved":false,"context_lines":[{"line_number":582,"context_line":"        created_server1 \u003d self.api.post_server({\u0027server\u0027: server_req})"},{"line_number":583,"context_line":"        # _wait_for_state_change waits for the status to go from BUILD which"},{"line_number":584,"context_line":"        # should then be ACTIVE."},{"line_number":585,"context_line":"        server1 \u003d self._wait_for_state_change(created_server1, \u0027BUILD\u0027)"},{"line_number":586,"context_line":"        self.assertEqual(\u0027ACTIVE\u0027, server1[\u0027status\u0027])"},{"line_number":587,"context_line":""},{"line_number":588,"context_line":"        created_server2 \u003d self.api.post_server({\u0027server\u0027: server_req})"},{"line_number":589,"context_line":"        server2 \u003d self._wait_for_state_change(created_server2, \u0027BUILD\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_dabcd56d","line":586,"range":{"start_line":585,"start_character":0,"end_line":586,"end_character":53},"in_reply_to":"3fa7e38b_7c012b39","updated":"2019-11-15 16:13:33.000000000","message":"Done","commit_id":"fd5bd95a8c824f5d776973801b21491e6f301356"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a5fb73813b290b8423af63861be43e594a59bde2","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        return server"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    # TODO(stephenfin): Remove this once we subclass \u0027InstanceHelperMixin\u0027"},{"line_number":94,"context_line":"    def _wait_for_state_change(self, server, expected_status, max_retries\u003d10):"},{"line_number":95,"context_line":"        return self._wait_for_server_parameter("},{"line_number":96,"context_line":"            self.api, server, {\u0027status\u0027: expected_status}, max_retries)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_a9799582","line":93,"updated":"2019-10-25 19:36:08.000000000","message":"Not sure why this TODO is here, as you end up actually keeping _wait_for_state_change in ServersTestBase because of the different signature - the one from InstanceHelperMixin takes the admin_api as an arg, so you end up having ServersTestBase\u0027s _wait_for_state_change calling super with self.api as an arg [1].\n\n[1] https://review.opendev.org/#/c/689182/3/nova/tests/functional/test_servers.py@77","commit_id":"364eaf96095e4eeca795e0e6db03a9d31bb4747f"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"d129f92f983a9d70c92823889ef24d28904b2d8a","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"        return server"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    # TODO(stephenfin): Remove this once we subclass \u0027InstanceHelperMixin\u0027"},{"line_number":94,"context_line":"    def _wait_for_state_change(self, server, expected_status, max_retries\u003d10):"},{"line_number":95,"context_line":"        return self._wait_for_server_parameter("},{"line_number":96,"context_line":"            self.api, server, {\u0027status\u0027: expected_status}, max_retries)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_b01d9178","line":93,"in_reply_to":"3fa7e38b_a9799582","updated":"2019-11-14 11:34:19.000000000","message":"Done","commit_id":"364eaf96095e4eeca795e0e6db03a9d31bb4747f"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"a5fb73813b290b8423af63861be43e594a59bde2","unresolved":false,"context_lines":[{"line_number":94,"context_line":"    def _wait_for_state_change(self, server, expected_status, max_retries\u003d10):"},{"line_number":95,"context_line":"        return self._wait_for_server_parameter("},{"line_number":96,"context_line":"            self.api, server, {\u0027status\u0027: expected_status}, max_retries)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    def _wait_for_deletion(self, server_id):"},{"line_number":99,"context_line":"        # Wait (briefly) for deletion"},{"line_number":100,"context_line":"        for _retries in range(50):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_498a6164","line":97,"updated":"2019-10-25 19:36:08.000000000","message":"Right, so all of this was basically just copying [1] into ServersTestBase to facilitate the eventual \"merger\".\n\n[1] https://review.opendev.org/#/c/689180/3/nova/tests/functional/integrated_helpers.py@97","commit_id":"364eaf96095e4eeca795e0e6db03a9d31bb4747f"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"5f3720b918af662a3238ddcb38190112d37ac2a5","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        found_server \u003d self._wait_for_state_change(found_server, \u0027ERROR\u0027)"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        # Delete the server"},{"line_number":183,"context_line":"        self._delete_server(created_server)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"        # We should have no (persisted) build failures until we update"}],"source_content_type":"text/x-python","patch_set":4,"id":"3fa7e38b_3c4df3c3","line":182,"range":{"start_line":182,"start_character":8,"end_line":182,"end_character":27},"updated":"2019-11-14 22:16:19.000000000","message":"This seems like a pretty unnecessary comment (throughout)","commit_id":"fd5bd95a8c824f5d776973801b21491e6f301356"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"68a63dedca3c0d30f42c43b8351c31d10b65312e","unresolved":false,"context_lines":[{"line_number":1764,"context_line":"    def test_resize_confirm_reverse(self):"},{"line_number":1765,"context_line":"        self._test_resize_confirm(dest_hostname\u003d\u0027host2\u0027)"},{"line_number":1766,"context_line":""},{"line_number":1767,"context_line":"    def _resize_and_check_allocations(self, server, old_flavor, new_flavor,"},{"line_number":1768,"context_line":"            source_rp_uuid, dest_rp_uuid):"},{"line_number":1769,"context_line":"        self.flags(allow_resize_to_same_host\u003dFalse)"},{"line_number":1770,"context_line":"        resize_req \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_a7bf60ce","line":1767,"updated":"2019-11-19 15:19:48.000000000","message":"This is the only diff between PS5 and 6 and it\u0027s due to I32bba50ee87aa70c5df0f5a538faf6cea3cc6813 so looks OK.","commit_id":"609a5d6a214ab6cbd99d3987bf9e1159a8f8457e"}]}
