)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"af8389029e19f123e8f873561a7105116fa19eb1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"93c4d01e_de360db8","updated":"2025-03-18 14:04:05.000000000","message":"Sorry, I thought I was already +2 on this","commit_id":"32afd0c644f1b9e378d113fba11bb189682e1740"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1b68af77a8e92c7e37923948b2f685878546f8e6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"be1e070e_4cffbe80","updated":"2025-03-18 15:29:24.000000000","message":"this looks reasonable to me","commit_id":"32afd0c644f1b9e378d113fba11bb189682e1740"}],"nova/tests/functional/regressions/test_bug_2098496.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6f336911b1fbbfc4ca2a9ef3cf7a4acd7b8a2bfe","unresolved":true,"context_lines":[{"line_number":52,"context_line":"        self.assert_placement_pci_view("},{"line_number":53,"context_line":"            \"compute1\", **compute1_expected_placement_view)"},{"line_number":54,"context_line":"        self.assertPCIDeviceCounts(\u0027compute1\u0027, total\u003d2, free\u003d2)"},{"line_number":55,"context_line":"        # assert that the two VFs are from the same PF are in the same pool"},{"line_number":56,"context_line":"        pools \u003d objects.ComputeNode.get_first_node_by_host_for_old_compat("},{"line_number":57,"context_line":"            self.ctxt, \"compute1\").pci_device_pools"},{"line_number":58,"context_line":"        self.assertEqual(len(pools), 1)"}],"source_content_type":"text/x-python","patch_set":3,"id":"58ce09e6_2af6a0cf","line":55,"range":{"start_line":55,"start_character":34,"end_line":55,"end_character":37},"updated":"2025-03-13 15:44:45.000000000","message":"nit: drop it","commit_id":"5f6163bf791f3e97c2a5955f6f341acd6c1ef7bb"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"54b040f6c931961ca9b669b471bcd5a247fbf808","unresolved":false,"context_lines":[{"line_number":52,"context_line":"        self.assert_placement_pci_view("},{"line_number":53,"context_line":"            \"compute1\", **compute1_expected_placement_view)"},{"line_number":54,"context_line":"        self.assertPCIDeviceCounts(\u0027compute1\u0027, total\u003d2, free\u003d2)"},{"line_number":55,"context_line":"        # assert that the two VFs are from the same PF are in the same pool"},{"line_number":56,"context_line":"        pools \u003d objects.ComputeNode.get_first_node_by_host_for_old_compat("},{"line_number":57,"context_line":"            self.ctxt, \"compute1\").pci_device_pools"},{"line_number":58,"context_line":"        self.assertEqual(len(pools), 1)"}],"source_content_type":"text/x-python","patch_set":3,"id":"da7ef4fb_d7dbe5cc","line":55,"range":{"start_line":55,"start_character":34,"end_line":55,"end_character":37},"in_reply_to":"58ce09e6_2af6a0cf","updated":"2025-03-13 17:38:40.000000000","message":"Done","commit_id":"5f6163bf791f3e97c2a5955f6f341acd6c1ef7bb"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6f336911b1fbbfc4ca2a9ef3cf7a4acd7b8a2bfe","unresolved":true,"context_lines":[{"line_number":116,"context_line":"            \"0000:81:00.0\": {self.VF_RC: 2}"},{"line_number":117,"context_line":"        }"},{"line_number":118,"context_line":"        compute1_expected_placement_view[\"allocations\"][server_1vf[\"id\"]] \u003d {"},{"line_number":119,"context_line":"            \"0000:81:00.0\": {self.VF_RC: 2},"},{"line_number":120,"context_line":"        }"},{"line_number":121,"context_line":"        self.assert_placement_pci_view("},{"line_number":122,"context_line":"            \"compute1\", **compute1_expected_placement_view)"}],"source_content_type":"text/x-python","patch_set":3,"id":"68456b49_8ed80793","line":119,"updated":"2025-03-13 15:44:45.000000000","message":"this is probably the result of the PCI healing logic looking at the allocation in the PCI tracker not matching with the allocation in placement and fixing up the placement allocations. We can assert that here.","commit_id":"5f6163bf791f3e97c2a5955f6f341acd6c1ef7bb"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"54b040f6c931961ca9b669b471bcd5a247fbf808","unresolved":false,"context_lines":[{"line_number":116,"context_line":"            \"0000:81:00.0\": {self.VF_RC: 2}"},{"line_number":117,"context_line":"        }"},{"line_number":118,"context_line":"        compute1_expected_placement_view[\"allocations\"][server_1vf[\"id\"]] \u003d {"},{"line_number":119,"context_line":"            \"0000:81:00.0\": {self.VF_RC: 2},"},{"line_number":120,"context_line":"        }"},{"line_number":121,"context_line":"        self.assert_placement_pci_view("},{"line_number":122,"context_line":"            \"compute1\", **compute1_expected_placement_view)"}],"source_content_type":"text/x-python","patch_set":3,"id":"f9e6e876_2efe56bf","line":119,"in_reply_to":"68456b49_8ed80793","updated":"2025-03-13 17:38:40.000000000","message":"Done","commit_id":"5f6163bf791f3e97c2a5955f6f341acd6c1ef7bb"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6b98cb1616cf27221dd578cf04ecd22cae7371ac","unresolved":true,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        def alloc_by_rc(allocations, rc):"},{"line_number":130,"context_line":"            return ["},{"line_number":131,"context_line":"                alloc[\"resources\"][self.VF_RC]"},{"line_number":132,"context_line":"                for alloc in allocations.values()"},{"line_number":133,"context_line":"                if self.VF_RC in alloc[\"resources\"]"},{"line_number":134,"context_line":"            ]"}],"source_content_type":"text/x-python","patch_set":4,"id":"92c155d5_e3c3ced2","line":131,"range":{"start_line":131,"start_character":35,"end_line":131,"end_character":45},"updated":"2025-03-13 17:40:22.000000000","message":"rc","commit_id":"5ca1c3f82c805d1215a3449d5d27cdff15fa57f7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1b68af77a8e92c7e37923948b2f685878546f8e6","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        def alloc_by_rc(allocations, rc):"},{"line_number":130,"context_line":"            return ["},{"line_number":131,"context_line":"                alloc[\"resources\"][self.VF_RC]"},{"line_number":132,"context_line":"                for alloc in allocations.values()"},{"line_number":133,"context_line":"                if self.VF_RC in alloc[\"resources\"]"},{"line_number":134,"context_line":"            ]"}],"source_content_type":"text/x-python","patch_set":4,"id":"c24c2b81_3249693c","line":131,"range":{"start_line":131,"start_character":35,"end_line":131,"end_character":45},"in_reply_to":"92c155d5_e3c3ced2","updated":"2025-03-18 15:29:24.000000000","message":"Done","commit_id":"5ca1c3f82c805d1215a3449d5d27cdff15fa57f7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6b98cb1616cf27221dd578cf04ecd22cae7371ac","unresolved":true,"context_lines":[{"line_number":130,"context_line":"            return ["},{"line_number":131,"context_line":"                alloc[\"resources\"][self.VF_RC]"},{"line_number":132,"context_line":"                for alloc in allocations.values()"},{"line_number":133,"context_line":"                if self.VF_RC in alloc[\"resources\"]"},{"line_number":134,"context_line":"            ]"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        pci_alloc_before \u003d alloc_by_rc("}],"source_content_type":"text/x-python","patch_set":4,"id":"8c4afe0e_b3abe1ed","line":133,"range":{"start_line":133,"start_character":19,"end_line":133,"end_character":29},"updated":"2025-03-13 17:40:22.000000000","message":"rc","commit_id":"5ca1c3f82c805d1215a3449d5d27cdff15fa57f7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1b68af77a8e92c7e37923948b2f685878546f8e6","unresolved":false,"context_lines":[{"line_number":130,"context_line":"            return ["},{"line_number":131,"context_line":"                alloc[\"resources\"][self.VF_RC]"},{"line_number":132,"context_line":"                for alloc in allocations.values()"},{"line_number":133,"context_line":"                if self.VF_RC in alloc[\"resources\"]"},{"line_number":134,"context_line":"            ]"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        pci_alloc_before \u003d alloc_by_rc("}],"source_content_type":"text/x-python","patch_set":4,"id":"c967f091_16aace8d","line":133,"range":{"start_line":133,"start_character":19,"end_line":133,"end_character":29},"in_reply_to":"8c4afe0e_b3abe1ed","updated":"2025-03-18 15:29:24.000000000","message":"Done","commit_id":"5ca1c3f82c805d1215a3449d5d27cdff15fa57f7"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1b68af77a8e92c7e37923948b2f685878546f8e6","unresolved":true,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        self._delete_server(server_1vf)"},{"line_number":113,"context_line":"        self.assertPCIDeviceCounts(\u0027compute1\u0027, total\u003d2, free\u003d2)"},{"line_number":114,"context_line":"        self.assert_placement_pci_view(\"compute1\", **compute1_empty)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        # This is already shows the potential issue behind bug/2098496."},{"line_number":117,"context_line":"        # After the server is deleted we are not back to a single pool of 2"}],"source_content_type":"text/x-python","patch_set":6,"id":"a2cb8f9e_820a1844","line":114,"updated":"2025-03-18 15:29:24.000000000","message":"so empty here is showing that ther eare no allcoation but a single inventory of 2 RC\n\ni.e. its a copy of compute1_expected_placement_view representing the initial state were the resouce classes are reported and there are no allcoations.","commit_id":"32afd0c644f1b9e378d113fba11bb189682e1740"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c2f5fdb3317dcb8e88023ff21940a371ed396c6b","unresolved":false,"context_lines":[{"line_number":111,"context_line":""},{"line_number":112,"context_line":"        self._delete_server(server_1vf)"},{"line_number":113,"context_line":"        self.assertPCIDeviceCounts(\u0027compute1\u0027, total\u003d2, free\u003d2)"},{"line_number":114,"context_line":"        self.assert_placement_pci_view(\"compute1\", **compute1_empty)"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        # This is already shows the potential issue behind bug/2098496."},{"line_number":117,"context_line":"        # After the server is deleted we are not back to a single pool of 2"}],"source_content_type":"text/x-python","patch_set":6,"id":"387545a4_8422b198","line":114,"in_reply_to":"a2cb8f9e_820a1844","updated":"2025-03-19 11:18:19.000000000","message":"yes","commit_id":"32afd0c644f1b9e378d113fba11bb189682e1740"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1b68af77a8e92c7e37923948b2f685878546f8e6","unresolved":true,"context_lines":[{"line_number":123,"context_line":"        self.assertEqual(len(pools), 2)"},{"line_number":124,"context_line":"        self.assertEqual(pools[0].count, 1)"},{"line_number":125,"context_line":"        self.assertEqual(pools[1].count, 1)"},{"line_number":126,"context_line":"        self.assertEqual(pools[0].tags[\u0027rp_uuid\u0027], pools[1].tags[\u0027rp_uuid\u0027])"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        # This is the expected state after the bug is fixed"},{"line_number":129,"context_line":"        # assert that the single pool is not broken into two during the"}],"source_content_type":"text/x-python","patch_set":6,"id":"cef5b9d2_19b1b08f","line":126,"updated":"2025-03-18 15:29:24.000000000","message":"and here we have the incorrect behviaor where the pools are split\neventhough they have the same rp_uuid for both pools and therefore shoudl be considered the same","commit_id":"32afd0c644f1b9e378d113fba11bb189682e1740"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c2f5fdb3317dcb8e88023ff21940a371ed396c6b","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        self.assertEqual(len(pools), 2)"},{"line_number":124,"context_line":"        self.assertEqual(pools[0].count, 1)"},{"line_number":125,"context_line":"        self.assertEqual(pools[1].count, 1)"},{"line_number":126,"context_line":"        self.assertEqual(pools[0].tags[\u0027rp_uuid\u0027], pools[1].tags[\u0027rp_uuid\u0027])"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"        # This is the expected state after the bug is fixed"},{"line_number":129,"context_line":"        # assert that the single pool is not broken into two during the"}],"source_content_type":"text/x-python","patch_set":6,"id":"e4de877b_f44518ed","line":126,"in_reply_to":"cef5b9d2_19b1b08f","updated":"2025-03-19 11:18:19.000000000","message":"yes","commit_id":"32afd0c644f1b9e378d113fba11bb189682e1740"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1b68af77a8e92c7e37923948b2f685878546f8e6","unresolved":true,"context_lines":[{"line_number":131,"context_line":"        # pools \u003d objects.ComputeNode.get_first_node_by_host_for_old_compat("},{"line_number":132,"context_line":"        #     self.ctxt, \"compute1\").pci_device_pools"},{"line_number":133,"context_line":"        # self.assertEqual(len(pools), 1)"},{"line_number":134,"context_line":"        # self.assertEqual(pools[0].count, 2)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        server_1vf \u003d self._create_server(flavor_id\u003dflavor_id, networks\u003d[])"},{"line_number":137,"context_line":"        # This is bug/2098496 as the VM now consumes 2 VFs instead of one it"}],"source_content_type":"text/x-python","patch_set":6,"id":"86bf5c40_ff9edf1a","line":134,"updated":"2025-03-18 15:29:24.000000000","message":"+1 yep that is the expected state.","commit_id":"32afd0c644f1b9e378d113fba11bb189682e1740"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c2f5fdb3317dcb8e88023ff21940a371ed396c6b","unresolved":false,"context_lines":[{"line_number":131,"context_line":"        # pools \u003d objects.ComputeNode.get_first_node_by_host_for_old_compat("},{"line_number":132,"context_line":"        #     self.ctxt, \"compute1\").pci_device_pools"},{"line_number":133,"context_line":"        # self.assertEqual(len(pools), 1)"},{"line_number":134,"context_line":"        # self.assertEqual(pools[0].count, 2)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"        server_1vf \u003d self._create_server(flavor_id\u003dflavor_id, networks\u003d[])"},{"line_number":137,"context_line":"        # This is bug/2098496 as the VM now consumes 2 VFs instead of one it"}],"source_content_type":"text/x-python","patch_set":6,"id":"7694cb20_b61eb0da","line":134,"in_reply_to":"86bf5c40_ff9edf1a","updated":"2025-03-19 11:18:19.000000000","message":"Acknowledged","commit_id":"32afd0c644f1b9e378d113fba11bb189682e1740"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1b68af77a8e92c7e37923948b2f685878546f8e6","unresolved":true,"context_lines":[{"line_number":148,"context_line":"            \"compute1\", **compute1_expected_placement_view)"},{"line_number":149,"context_line":"        # prove that the placement view got corrupted only after the claim"},{"line_number":150,"context_line":"        # on the compute due the allocation healing logic"},{"line_number":151,"context_line":"        last_healing \u003d self.pci_healing_fixture.last_healing(\"compute1\")"},{"line_number":152,"context_line":"        alloc_before \u003d last_healing[0]"},{"line_number":153,"context_line":"        alloc_after \u003d last_healing[1]"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"bb71a718_3cca35ae","line":151,"updated":"2025-03-18 15:29:24.000000000","message":"without looking at the details of pci_healing_fixture i would assume its just doing run_perodics and triggering update_avilable_resocues and the relevent healing logic.","commit_id":"32afd0c644f1b9e378d113fba11bb189682e1740"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c2f5fdb3317dcb8e88023ff21940a371ed396c6b","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            \"compute1\", **compute1_expected_placement_view)"},{"line_number":149,"context_line":"        # prove that the placement view got corrupted only after the claim"},{"line_number":150,"context_line":"        # on the compute due the allocation healing logic"},{"line_number":151,"context_line":"        last_healing \u003d self.pci_healing_fixture.last_healing(\"compute1\")"},{"line_number":152,"context_line":"        alloc_before \u003d last_healing[0]"},{"line_number":153,"context_line":"        alloc_after \u003d last_healing[1]"},{"line_number":154,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ad33d757_759244be","line":151,"in_reply_to":"bb71a718_3cca35ae","updated":"2025-03-19 11:18:19.000000000","message":"It is recording any allocation healing happened due to either the periodic or in sync with the _update() call at claim.","commit_id":"32afd0c644f1b9e378d113fba11bb189682e1740"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"1b68af77a8e92c7e37923948b2f685878546f8e6","unresolved":true,"context_lines":[{"line_number":178,"context_line":"        # }"},{"line_number":179,"context_line":"        # self.assert_placement_pci_view("},{"line_number":180,"context_line":"        #     \"compute1\", **compute1_expected_placement_view)"},{"line_number":181,"context_line":"        # self.assert_no_pci_healing(\"compute1\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"1e03471a_3e48bd66","line":181,"updated":"2025-03-18 15:29:24.000000000","message":"ack +1","commit_id":"32afd0c644f1b9e378d113fba11bb189682e1740"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c2f5fdb3317dcb8e88023ff21940a371ed396c6b","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        # }"},{"line_number":179,"context_line":"        # self.assert_placement_pci_view("},{"line_number":180,"context_line":"        #     \"compute1\", **compute1_expected_placement_view)"},{"line_number":181,"context_line":"        # self.assert_no_pci_healing(\"compute1\")"}],"source_content_type":"text/x-python","patch_set":6,"id":"26552292_82380dcb","line":181,"in_reply_to":"1e03471a_3e48bd66","updated":"2025-03-19 11:18:19.000000000","message":"Acknowledged","commit_id":"32afd0c644f1b9e378d113fba11bb189682e1740"}]}
