)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"020556f8f7010ed742c8c56270b3a52d04edf9d9","unresolved":true,"context_lines":[{"line_number":19,"context_line":"because the errored migration is filtered out once the instance is"},{"line_number":20,"context_line":"no longer in a resize state."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"There is two separate fix:"},{"line_number":23,"context_line":"1. Change the periodic to detect the leaked allocation and release it."},{"line_number":24,"context_line":"   This will be useful for cleaning up all the previously leaked"},{"line_number":25,"context_line":"   allocations on the compute."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"106fad32_0fecbe6f","line":22,"range":{"start_line":22,"start_character":6,"end_line":22,"end_character":8},"updated":"2026-09-18 14:24:26.000000000","message":"are","commit_id":"bbea6115185c98fe0fdc914b1d224705c99c55aa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c391f9b650a3cf2709b3af9ed478f2b7b69bc0b3","unresolved":false,"context_lines":[{"line_number":19,"context_line":"because the errored migration is filtered out once the instance is"},{"line_number":20,"context_line":"no longer in a resize state."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"There is two separate fix:"},{"line_number":23,"context_line":"1. Change the periodic to detect the leaked allocation and release it."},{"line_number":24,"context_line":"   This will be useful for cleaning up all the previously leaked"},{"line_number":25,"context_line":"   allocations on the compute."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"4cd4c613_64e7bb26","line":22,"range":{"start_line":22,"start_character":6,"end_line":22,"end_character":8},"in_reply_to":"106fad32_0fecbe6f","updated":"2026-09-21 09:19:09.000000000","message":"Done","commit_id":"bbea6115185c98fe0fdc914b1d224705c99c55aa"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"020556f8f7010ed742c8c56270b3a52d04edf9d9","unresolved":true,"context_lines":[{"line_number":30,"context_line":"This patch implements #1. And a subsequent patch will add #2."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"TODO:"},{"line_number":33,"context_line":"* unit test coverage"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Related-Bug: #2166786"},{"line_number":36,"context_line":"Assisted-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"e16e28ec_40fbb69e","line":33,"updated":"2026-09-18 14:24:26.000000000","message":"would be nice indeed but that\u0027s a good start.","commit_id":"bbea6115185c98fe0fdc914b1d224705c99c55aa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c391f9b650a3cf2709b3af9ed478f2b7b69bc0b3","unresolved":false,"context_lines":[{"line_number":30,"context_line":"This patch implements #1. And a subsequent patch will add #2."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"TODO:"},{"line_number":33,"context_line":"* unit test coverage"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"Related-Bug: #2166786"},{"line_number":36,"context_line":"Assisted-By: Claude Opus 4.8 \u003cnoreply@anthropic.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"09ccf297_3a369d32","line":33,"in_reply_to":"e16e28ec_40fbb69e","updated":"2026-09-21 09:19:09.000000000","message":"Done","commit_id":"bbea6115185c98fe0fdc914b1d224705c99c55aa"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"020556f8f7010ed742c8c56270b3a52d04edf9d9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"447937a6_d42b8a63","updated":"2026-09-18 14:24:26.000000000","message":"I guess you\u0027ll push UTs later but fwiw, this patch looks good to me now.","commit_id":"bbea6115185c98fe0fdc914b1d224705c99c55aa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5e05032e7e2feea0a83b633e7316f67443686505","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"72de646b_59b79982","updated":"2026-09-21 14:05:31.000000000","message":"recheck functional timeout","commit_id":"d41334e6d06cc84846cd6e625514d9188a6cff4f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3c5723e477aef61dc0064d81db87098152c0fa56","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"4fbd3f95_f0ae59a6","updated":"2026-09-22 09:18:52.000000000","message":"recheck hang","commit_id":"d41334e6d06cc84846cd6e625514d9188a6cff4f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c041bacafae8079e8ce3a1b6b05659af3c58e3ba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b452840b_84d786e9","updated":"2026-09-24 11:16:15.000000000","message":"recheck requeue","commit_id":"d41334e6d06cc84846cd6e625514d9188a6cff4f"}],"nova/compute/resource_tracker.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"020556f8f7010ed742c8c56270b3a52d04edf9d9","unresolved":true,"context_lines":[{"line_number":1075,"context_line":"        # we can tell the leaked claims apart from the legitimately tracked,"},{"line_number":1076,"context_line":"        # in-progress ones."},{"line_number":1077,"context_line":"        self._release_leaked_move_claims("},{"line_number":1078,"context_line":"            context, migrations, instance_by_uuid, nodename)"},{"line_number":1079,"context_line":""},{"line_number":1080,"context_line":"        # A new compute node means there won\u0027t be a resource provider yet since"},{"line_number":1081,"context_line":"        # that would be created via the _update() call below, and if there is"}],"source_content_type":"text/x-python","patch_set":1,"id":"e7f539a4_e63ed2e9","line":1078,"updated":"2026-09-18 14:24:26.000000000","message":"note: the ordering matters as we lookup self.tracked_migrations which is populated in _update_usage_from_migrations() above and before self.pci_tracker.clean_usage(instances, migrations) which is where we actually heal the PCITracker.","commit_id":"bbea6115185c98fe0fdc914b1d224705c99c55aa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c391f9b650a3cf2709b3af9ed478f2b7b69bc0b3","unresolved":false,"context_lines":[{"line_number":1075,"context_line":"        # we can tell the leaked claims apart from the legitimately tracked,"},{"line_number":1076,"context_line":"        # in-progress ones."},{"line_number":1077,"context_line":"        self._release_leaked_move_claims("},{"line_number":1078,"context_line":"            context, migrations, instance_by_uuid, nodename)"},{"line_number":1079,"context_line":""},{"line_number":1080,"context_line":"        # A new compute node means there won\u0027t be a resource provider yet since"},{"line_number":1081,"context_line":"        # that would be created via the _update() call below, and if there is"}],"source_content_type":"text/x-python","patch_set":1,"id":"1bde3dc6_d0c9f55a","line":1078,"in_reply_to":"e7f539a4_e63ed2e9","updated":"2026-09-21 09:19:09.000000000","message":"Acknowledged","commit_id":"bbea6115185c98fe0fdc914b1d224705c99c55aa"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"020556f8f7010ed742c8c56270b3a52d04edf9d9","unresolved":false,"context_lines":[{"line_number":1694,"context_line":"                    uuid not in self.pci_tracker.claims):"},{"line_number":1695,"context_line":"                continue"},{"line_number":1696,"context_line":""},{"line_number":1697,"context_line":"            instance \u003d migration.instance"},{"line_number":1698,"context_line":"            LOG.warning("},{"line_number":1699,"context_line":"                \"Releasing a move claim leaked on this host as the \""},{"line_number":1700,"context_line":"                \"destination of the failed migration %s. This can happen if \""}],"source_content_type":"text/x-python","patch_set":1,"id":"eb3385a8_f366c5ed","line":1697,"updated":"2026-09-18 14:24:26.000000000","message":"well, worth saying we\u0027ll do an extra RPC roundtrip for getting the instance object given https://github.com/openstack/nova/blob/94de0576ca02e0668233bedfbe7e18b87316c708/nova/objects/migration.py#L234\n\nThat said, given the few instance migrations that should be leaked due to the issue, I don\u0027t think this is a large performance hit, but we could mention that to our users.\n\n//later\nOh wait, migraiton.instance is actually already populated before by https://github.com/openstack/nova/blob/94de0576ca02e0668233bedfbe7e18b87316c708/nova/compute/resource_tracker.py#L1587 so there is no extra DB roundtrip. Nevermind my comment.","commit_id":"bbea6115185c98fe0fdc914b1d224705c99c55aa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"95c9fb64b1d40a0a4e0a01eff72704c161d500ac","unresolved":true,"context_lines":[{"line_number":1075,"context_line":"        # we can tell the leaked claims apart from the legitimately tracked,"},{"line_number":1076,"context_line":"        # in-progress ones."},{"line_number":1077,"context_line":"        self._release_leaked_move_claims("},{"line_number":1078,"context_line":"            context, migrations, instance_by_uuid, nodename)"},{"line_number":1079,"context_line":""},{"line_number":1080,"context_line":"        # A new compute node means there won\u0027t be a resource provider yet since"},{"line_number":1081,"context_line":"        # that would be created via the _update() call below, and if there is"}],"source_content_type":"text/x-python","patch_set":2,"id":"60c19671_e690681b","line":1078,"range":{"start_line":1078,"start_character":21,"end_line":1078,"end_character":31},"updated":"2026-09-23 14:27:43.000000000","message":"These will only be \"in progress and error\" migration. I don\u0027t see that you assert the migration state in the regression test. Are you sure that the migrations affected will be included in reality? And if you are, what state is the migration left in? Might be good to add that assertion in the patch above if for no other reason than recording the (currently) expected end state.\n\nLATER: I see below you\u0027re basically asserting it.","commit_id":"d41334e6d06cc84846cd6e625514d9188a6cff4f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e8ccf98cfcae57c31ea3bc65b4a7163ce6610f0c","unresolved":true,"context_lines":[{"line_number":1075,"context_line":"        # we can tell the leaked claims apart from the legitimately tracked,"},{"line_number":1076,"context_line":"        # in-progress ones."},{"line_number":1077,"context_line":"        self._release_leaked_move_claims("},{"line_number":1078,"context_line":"            context, migrations, instance_by_uuid, nodename)"},{"line_number":1079,"context_line":""},{"line_number":1080,"context_line":"        # A new compute node means there won\u0027t be a resource provider yet since"},{"line_number":1081,"context_line":"        # that would be created via the _update() call below, and if there is"}],"source_content_type":"text/x-python","patch_set":2,"id":"eded01c0_f9a8c76e","line":1078,"range":{"start_line":1078,"start_character":21,"end_line":1078,"end_character":31},"in_reply_to":"60c19671_e690681b","updated":"2026-09-23 14:38:26.000000000","message":"yes, these migrations are left in error. I assert that in the functional reproducer as well https://review.opendev.org/c/openstack/nova/+/1004658/7/nova/tests/functional/regressions/test_bug_2166786.py#90","commit_id":"d41334e6d06cc84846cd6e625514d9188a6cff4f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"6b9c03b391c0a0497c7d52b226ba0a8ccc30832a","unresolved":true,"context_lines":[{"line_number":1075,"context_line":"        # we can tell the leaked claims apart from the legitimately tracked,"},{"line_number":1076,"context_line":"        # in-progress ones."},{"line_number":1077,"context_line":"        self._release_leaked_move_claims("},{"line_number":1078,"context_line":"            context, migrations, instance_by_uuid, nodename)"},{"line_number":1079,"context_line":""},{"line_number":1080,"context_line":"        # A new compute node means there won\u0027t be a resource provider yet since"},{"line_number":1081,"context_line":"        # that would be created via the _update() call below, and if there is"}],"source_content_type":"text/x-python","patch_set":2,"id":"fe9f3a19_b56bd7d0","line":1078,"range":{"start_line":1078,"start_character":21,"end_line":1078,"end_character":31},"in_reply_to":"eded01c0_f9a8c76e","updated":"2026-09-23 14:45:28.000000000","message":"Oh sorry, I missed it.. I read that as/with the instance status.","commit_id":"d41334e6d06cc84846cd6e625514d9188a6cff4f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cc5f3806f49482ae6ababd2f53aeb925cfb596f2","unresolved":false,"context_lines":[{"line_number":1075,"context_line":"        # we can tell the leaked claims apart from the legitimately tracked,"},{"line_number":1076,"context_line":"        # in-progress ones."},{"line_number":1077,"context_line":"        self._release_leaked_move_claims("},{"line_number":1078,"context_line":"            context, migrations, instance_by_uuid, nodename)"},{"line_number":1079,"context_line":""},{"line_number":1080,"context_line":"        # A new compute node means there won\u0027t be a resource provider yet since"},{"line_number":1081,"context_line":"        # that would be created via the _update() call below, and if there is"}],"source_content_type":"text/x-python","patch_set":2,"id":"442d6f05_b3881894","line":1078,"range":{"start_line":1078,"start_character":21,"end_line":1078,"end_character":31},"in_reply_to":"fe9f3a19_b56bd7d0","updated":"2026-09-23 17:18:30.000000000","message":"Acknowledged","commit_id":"d41334e6d06cc84846cd6e625514d9188a6cff4f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"95c9fb64b1d40a0a4e0a01eff72704c161d500ac","unresolved":true,"context_lines":[{"line_number":1672,"context_line":"            # An in-progress migration is either accounted for as an incoming"},{"line_number":1673,"context_line":"            # migration (and is present in tracked_migrations) or is still"},{"line_number":1674,"context_line":"            # legitimately holding the claim, so only consider failed ones."},{"line_number":1675,"context_line":"            if migration.status !\u003d \u0027error\u0027:"},{"line_number":1676,"context_line":"                continue"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"            # If the instance is actually here, or the migration is being"}],"source_content_type":"text/x-python","patch_set":2,"id":"90b03c3a_90bbfc1f","line":1675,"updated":"2026-09-23 14:27:43.000000000","message":"Aha, error I guess.","commit_id":"d41334e6d06cc84846cd6e625514d9188a6cff4f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"cc5f3806f49482ae6ababd2f53aeb925cfb596f2","unresolved":false,"context_lines":[{"line_number":1672,"context_line":"            # An in-progress migration is either accounted for as an incoming"},{"line_number":1673,"context_line":"            # migration (and is present in tracked_migrations) or is still"},{"line_number":1674,"context_line":"            # legitimately holding the claim, so only consider failed ones."},{"line_number":1675,"context_line":"            if migration.status !\u003d \u0027error\u0027:"},{"line_number":1676,"context_line":"                continue"},{"line_number":1677,"context_line":""},{"line_number":1678,"context_line":"            # If the instance is actually here, or the migration is being"}],"source_content_type":"text/x-python","patch_set":2,"id":"79c61e13_e5a389db","line":1675,"in_reply_to":"90b03c3a_90bbfc1f","updated":"2026-09-23 17:18:30.000000000","message":"Acknowledged","commit_id":"d41334e6d06cc84846cd6e625514d9188a6cff4f"}],"nova/tests/functional/regressions/test_bug_2166786.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"020556f8f7010ed742c8c56270b3a52d04edf9d9","unresolved":true,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class TestPCIColdMigrationFailureRevert(TestPCIColdMigrationBase):"},{"line_number":56,"context_line":"    \"\"\"Regression test for bug https://bugs.launchpad.net/nova/+bug/2166786"},{"line_number":57,"context_line":"    \"\"\""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def test_cold_migrate_server_with_PF(self):"},{"line_number":60,"context_line":"        pci_info \u003d fakelibvirt.HostPCIDevicesInfo(num_pfs\u003d2, num_vfs\u003d0)"}],"source_content_type":"text/x-python","patch_set":1,"id":"02179af3_f5bc4eff","line":57,"updated":"2026-09-18 14:24:26.000000000","message":"nit: this could have been done in the previous patch","commit_id":"bbea6115185c98fe0fdc914b1d224705c99c55aa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"c391f9b650a3cf2709b3af9ed478f2b7b69bc0b3","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class TestPCIColdMigrationFailureRevert(TestPCIColdMigrationBase):"},{"line_number":56,"context_line":"    \"\"\"Regression test for bug https://bugs.launchpad.net/nova/+bug/2166786"},{"line_number":57,"context_line":"    \"\"\""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def test_cold_migrate_server_with_PF(self):"},{"line_number":60,"context_line":"        pci_info \u003d fakelibvirt.HostPCIDevicesInfo(num_pfs\u003d2, num_vfs\u003d0)"}],"source_content_type":"text/x-python","patch_set":1,"id":"5812374c_3136f5dc","line":57,"in_reply_to":"02179af3_f5bc4eff","updated":"2026-09-21 09:19:09.000000000","message":"In the previous patch we had a single test that showed both that the allocation is leaked, and that the periodic did not cleaned up the leak. This patch fixes the periodic. I could have updated that single test case only to show the periodic now heals. But then on the next patch where the leak is prevented I anyhow needed a separate test case that shows the periodic healing independently from the in-line fix preventing the leak.\n\nIf you are pointing at the refactor then sure, I did this here as this is the first time two children classes uses the same helpers.\n\nI consider this as not worth changing.","commit_id":"bbea6115185c98fe0fdc914b1d224705c99c55aa"}],"nova/tests/unit/compute/test_resource_tracker.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"924cc41641506e36087a69872c34d20eb4f707d6","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":2,"id":"aaea6538_663f8543","updated":"2026-09-21 15:28:46.000000000","message":"those tests are sound. No missing coverage AFAICS.","commit_id":"d41334e6d06cc84846cd6e625514d9188a6cff4f"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8285bdaa0da3867da2e8add155446685baf64b70","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"8f544698_cdb0ba82","in_reply_to":"aaea6538_663f8543","updated":"2026-09-22 09:19:14.000000000","message":"Acknowledged","commit_id":"d41334e6d06cc84846cd6e625514d9188a6cff4f"}]}
