)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"80bcabf7115e199034db0a482ef588a4dda821a9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"082f39a0_e7202385","updated":"2022-02-20 08:53:07.000000000","message":"For some reason nova-tox-functional-centos8-py36 and/or nova-tox-functional-py38 fail sporadically because placement API returns record for migrated server\u0027s live migration allocation. I can\u0027t reproduce this problem locally.","commit_id":"7029900ad8c47b8f821dc16d737873ba95d2ae47"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"52286f025249be3b4dac3ce655d61ebfe9671d5e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"45897be7_925257b2","updated":"2022-02-19 21:27:58.000000000","message":"recheck","commit_id":"7029900ad8c47b8f821dc16d737873ba95d2ae47"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"1f9c4d385b70ec17e37a5af306f302dde1df26b4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"595c7631_03422662","updated":"2022-02-20 08:05:47.000000000","message":"recheck","commit_id":"7029900ad8c47b8f821dc16d737873ba95d2ae47"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"1e795c8977715652c4127ad94a31fdbf3744a5cd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"c1c9b905_fa7d0601","updated":"2022-02-20 08:53:15.000000000","message":"recheck","commit_id":"7029900ad8c47b8f821dc16d737873ba95d2ae47"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"3033a298b87ca69fb1249c1dfa2eb3ad300e63ae","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"22a3c81a_31664c0d","updated":"2022-02-22 13:38:54.000000000","message":"recheck","commit_id":"26d771d00c4d6ba97d66fc2bb954519a0f66d7f5"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"7e4ad2a6e82369a8ba15b330b73bc470c0d33ba5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"a044d4fb_91974262","updated":"2022-03-04 21:34:25.000000000","message":"Looks very good overall, just a couple of suggestions inline to be more Pythonic.\n\nAlso, I\u0027m not a fan of the servera_* variable names. I would suggest going down the allocations_a and port_binding_a road.","commit_id":"62b865f957b32cdc284671086363543948f890e9"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"1d6b330709525f429ac3f22ada0b512baddfe253","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"dde51d04_97cd5d4f","in_reply_to":"a044d4fb_91974262","updated":"2022-03-07 15:26:22.000000000","message":"Thank you for review, implemented this change.","commit_id":"62b865f957b32cdc284671086363543948f890e9"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"10b7bb885c4f37bc8f850ea100b30f035cca3752","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"1192e56d_3b7abed2","updated":"2022-03-08 13:50:46.000000000","message":"Good stuff, thanks!","commit_id":"8d29bad34cd125b53a2ba54804b714397be8ab35"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"f6085272eb1b119543e88189bdb42cff0a0ec8eb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"204294b0_4f619474","updated":"2022-03-08 15:57:55.000000000","message":"Hi Sean and Gibi. Kindly asking you to take a look when you have a minute.","commit_id":"8d29bad34cd125b53a2ba54804b714397be8ab35"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"767b1fc520d99cbe5e6f604d5ff3da0dcaff9bf0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"07d7b558_394cc444","updated":"2022-03-09 14:08:51.000000000","message":"Thank you very much Sean!","commit_id":"8d29bad34cd125b53a2ba54804b714397be8ab35"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d66c9d6615e0e7019734bf56ffd4d474e6fa6d1d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"13eca540_ecc9397a","updated":"2022-03-08 19:13:30.000000000","message":"the repoducer looks pretty good\nsome minor nits inline but overall +1\n","commit_id":"8d29bad34cd125b53a2ba54804b714397be8ab35"}],"nova/tests/functional/libvirt/test_live_migration.py":[{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"7e4ad2a6e82369a8ba15b330b73bc470c0d33ba5","unresolved":true,"context_lines":[{"line_number":207,"context_line":"        serverb_lm_allocation \u003d self.placement.get("},{"line_number":208,"context_line":"            \u0027/allocations/%s\u0027 % serverb_migration[\u0027uuid\u0027]"},{"line_number":209,"context_line":"        ).body[\u0027allocations\u0027]"},{"line_number":210,"context_line":"        self.assertNotEqual({}, serverb_lm_allocation)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        # FIXME(astupnikov) Because of bug #1960412 INACTIVE port binding"},{"line_number":213,"context_line":"        # on destination host would not be removed when queued live migration"}],"source_content_type":"text/x-python","patch_set":7,"id":"a1e0ec6a_b1beb5dc","line":210,"updated":"2022-03-04 21:34:25.000000000","message":"While this technically works, I\u0027d suggest asserting that the compute node UUID for src_hostname is in the allocation dict.","commit_id":"62b865f957b32cdc284671086363543948f890e9"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"1d6b330709525f429ac3f22ada0b512baddfe253","unresolved":true,"context_lines":[{"line_number":207,"context_line":"        serverb_lm_allocation \u003d self.placement.get("},{"line_number":208,"context_line":"            \u0027/allocations/%s\u0027 % serverb_migration[\u0027uuid\u0027]"},{"line_number":209,"context_line":"        ).body[\u0027allocations\u0027]"},{"line_number":210,"context_line":"        self.assertNotEqual({}, serverb_lm_allocation)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        # FIXME(astupnikov) Because of bug #1960412 INACTIVE port binding"},{"line_number":213,"context_line":"        # on destination host would not be removed when queued live migration"}],"source_content_type":"text/x-python","patch_set":7,"id":"cb5873f0_040c9242","line":210,"in_reply_to":"a1e0ec6a_b1beb5dc","updated":"2022-03-07 15:26:22.000000000","message":"I am not completely sure about this proposal: the idea behind the check I implemented it to confirm that there is an allocation for live migration UUID after queued live migration was cancelled. I am not sure how to properly implement same logic using compute node UUID","commit_id":"62b865f957b32cdc284671086363543948f890e9"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"c89345a839c7a27ed4a307be2b023edf48655bb4","unresolved":false,"context_lines":[{"line_number":207,"context_line":"        serverb_lm_allocation \u003d self.placement.get("},{"line_number":208,"context_line":"            \u0027/allocations/%s\u0027 % serverb_migration[\u0027uuid\u0027]"},{"line_number":209,"context_line":"        ).body[\u0027allocations\u0027]"},{"line_number":210,"context_line":"        self.assertNotEqual({}, serverb_lm_allocation)"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"        # FIXME(astupnikov) Because of bug #1960412 INACTIVE port binding"},{"line_number":213,"context_line":"        # on destination host would not be removed when queued live migration"}],"source_content_type":"text/x-python","patch_set":7,"id":"768d9ffe_808035ed","line":210,"in_reply_to":"cb5873f0_040c9242","updated":"2022-03-08 10:06:26.000000000","message":"Thought twice, took a second look and implemented this.","commit_id":"62b865f957b32cdc284671086363543948f890e9"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"7e4ad2a6e82369a8ba15b330b73bc470c0d33ba5","unresolved":true,"context_lines":[{"line_number":219,"context_line":"            self.neutron._port_bindings[self.neutron.port_1[\u0027id\u0027]]"},{"line_number":220,"context_line":"        )"},{"line_number":221,"context_line":"        self.assertEqual(1, len(servera_pb))"},{"line_number":222,"context_line":"        self.assertRaises(KeyError, lambda: servera_pb[\u0027src\u0027])"},{"line_number":223,"context_line":"        serverb_pb \u003d copy.deepcopy("},{"line_number":224,"context_line":"            self.neutron._port_bindings[self.neutron.port_2[\u0027id\u0027]]"},{"line_number":225,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":7,"id":"235364cd_b42f3615","line":222,"updated":"2022-03-04 21:34:25.000000000","message":"This would read much better as self.assertNotIn(\u0027src\u0027, servera_pb)","commit_id":"62b865f957b32cdc284671086363543948f890e9"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"1d6b330709525f429ac3f22ada0b512baddfe253","unresolved":false,"context_lines":[{"line_number":219,"context_line":"            self.neutron._port_bindings[self.neutron.port_1[\u0027id\u0027]]"},{"line_number":220,"context_line":"        )"},{"line_number":221,"context_line":"        self.assertEqual(1, len(servera_pb))"},{"line_number":222,"context_line":"        self.assertRaises(KeyError, lambda: servera_pb[\u0027src\u0027])"},{"line_number":223,"context_line":"        serverb_pb \u003d copy.deepcopy("},{"line_number":224,"context_line":"            self.neutron._port_bindings[self.neutron.port_2[\u0027id\u0027]]"},{"line_number":225,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":7,"id":"9078033e_c134bf36","line":222,"in_reply_to":"235364cd_b42f3615","updated":"2022-03-07 15:26:22.000000000","message":"Done","commit_id":"62b865f957b32cdc284671086363543948f890e9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d66c9d6615e0e7019734bf56ffd4d474e6fa6d1d","unresolved":true,"context_lines":[{"line_number":81,"context_line":"    when queued Live migration is aborted."},{"line_number":82,"context_line":"    \"\"\""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def setUp(self):"},{"line_number":85,"context_line":"        super().setUp()"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def test_queued_live_migration_abort_vm_status(self):"},{"line_number":88,"context_line":"        # Lock live migrations"}],"source_content_type":"text/x-python","patch_set":9,"id":"8ba21d25_c5174afb","line":85,"range":{"start_line":84,"start_character":1,"end_line":85,"end_character":23},"updated":"2022-03-08 19:13:30.000000000","message":"nit: this does nothing\n\nit what you would get if you did not redefine setUP","commit_id":"8d29bad34cd125b53a2ba54804b714397be8ab35"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"767b1fc520d99cbe5e6f604d5ff3da0dcaff9bf0","unresolved":false,"context_lines":[{"line_number":81,"context_line":"    when queued Live migration is aborted."},{"line_number":82,"context_line":"    \"\"\""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def setUp(self):"},{"line_number":85,"context_line":"        super().setUp()"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"    def test_queued_live_migration_abort_vm_status(self):"},{"line_number":88,"context_line":"        # Lock live migrations"}],"source_content_type":"text/x-python","patch_set":9,"id":"6807c940_3bd18ea1","line":85,"range":{"start_line":84,"start_character":1,"end_line":85,"end_character":23},"in_reply_to":"8ba21d25_c5174afb","updated":"2022-03-09 14:08:51.000000000","message":"Indeed, my bad. Thank you!","commit_id":"8d29bad34cd125b53a2ba54804b714397be8ab35"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"d66c9d6615e0e7019734bf56ffd4d474e6fa6d1d","unresolved":true,"context_lines":[{"line_number":141,"context_line":"    is aborted using Nova API."},{"line_number":142,"context_line":"    \"\"\""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def setUp(self):"},{"line_number":145,"context_line":"        super().setUp()"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def test_queued_live_migration_abort_leftovers_removed(self):"},{"line_number":148,"context_line":"        # Lock live migrations"}],"source_content_type":"text/x-python","patch_set":9,"id":"e3e699fb_bf7c6b41","line":145,"range":{"start_line":144,"start_character":0,"end_line":145,"end_character":23},"updated":"2022-03-08 19:13:30.000000000","message":"same you never need to create a fucntion that just does super().functoin()\nand nothing else.","commit_id":"8d29bad34cd125b53a2ba54804b714397be8ab35"},{"author":{"_account_id":19234,"name":"Alexey Stupnikov","email":"aleksey.stupnikov@gmail.com","username":"astupnikov"},"change_message_id":"767b1fc520d99cbe5e6f604d5ff3da0dcaff9bf0","unresolved":false,"context_lines":[{"line_number":141,"context_line":"    is aborted using Nova API."},{"line_number":142,"context_line":"    \"\"\""},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def setUp(self):"},{"line_number":145,"context_line":"        super().setUp()"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def test_queued_live_migration_abort_leftovers_removed(self):"},{"line_number":148,"context_line":"        # Lock live migrations"}],"source_content_type":"text/x-python","patch_set":9,"id":"4f125780_1dc97cae","line":145,"range":{"start_line":144,"start_character":0,"end_line":145,"end_character":23},"in_reply_to":"e3e699fb_bf7c6b41","updated":"2022-03-09 14:08:51.000000000","message":"Done","commit_id":"8d29bad34cd125b53a2ba54804b714397be8ab35"},{"author":{"_account_id":8864,"name":"Artom Lifshitz","email":"notartom@gmail.com","username":"artom"},"change_message_id":"10b7bb885c4f37bc8f850ea100b30f035cca3752","unresolved":true,"context_lines":[{"line_number":210,"context_line":"        src_uuid \u003d self.api.api_get("},{"line_number":211,"context_line":"            \u0027os-hypervisors?hypervisor_hostname_pattern\u003d%s\u0027 %"},{"line_number":212,"context_line":"            self.src_hostname).body[\u0027hypervisors\u0027][0][\u0027id\u0027]"},{"line_number":213,"context_line":"        self.assertIn(src_uuid, allocations_server_b_migration)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"        # FIXME(astupnikov) Because of bug #1960412 INACTIVE port binding"},{"line_number":216,"context_line":"        # on destination host would not be removed when queued live migration"}],"source_content_type":"text/x-python","patch_set":9,"id":"8e517915_56ce6167","line":213,"updated":"2022-03-08 13:50:46.000000000","message":"Nice!","commit_id":"8d29bad34cd125b53a2ba54804b714397be8ab35"}]}
