)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a00ddb5cf41719fc60df761cf3ef4e4bb6609954","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Bump InstanceNUMACell version after data migration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The data migration of InstanceNUMACell 1.4 to 1.5 only moved the data to"},{"line_number":10,"context_line":"the new pcpuset field but does not bumped the ovo version string of the"},{"line_number":11,"context_line":"object in the DB. This resulted in an 1.6 data with an 1.4 version"},{"line_number":12,"context_line":"string in the DB which subsequently causes that an old compute running"},{"line_number":13,"context_line":"1.4 ovo version will think it got an old ovo even though the data is"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"9c0c4442_ae8473b3","line":10,"range":{"start_line":10,"start_character":35,"end_line":10,"end_character":41},"updated":"2025-02-04 17:49:28.000000000","message":"\"bump\"","commit_id":"cb464bc9697d03d7b100dfc6ada88e7f5762ee00"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3638a144bce968becf7fccc1b67aaec75b2e66ee","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Bump InstanceNUMACell version after data migration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"The data migration of InstanceNUMACell 1.4 to 1.5 only moved the data to"},{"line_number":10,"context_line":"the new pcpuset field but does not bumped the ovo version string of the"},{"line_number":11,"context_line":"object in the DB. This resulted in an 1.6 data with an 1.4 version"},{"line_number":12,"context_line":"string in the DB which subsequently causes that an old compute running"},{"line_number":13,"context_line":"1.4 ovo version will think it got an old ovo even though the data is"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"a3e13b46_73b76af8","line":10,"range":{"start_line":10,"start_character":35,"end_line":10,"end_character":41},"in_reply_to":"9c0c4442_ae8473b3","updated":"2025-02-07 11:24:51.000000000","message":"Done","commit_id":"cb464bc9697d03d7b100dfc6ada88e7f5762ee00"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a00ddb5cf41719fc60df761cf3ef4e4bb6609954","unresolved":true,"context_lines":[{"line_number":16,"context_line":"data loss."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"So this change modified the data migration to also bump the ovo version"},{"line_number":19,"context_line":"in the DB."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Closes-Bug: #2097359"},{"line_number":22,"context_line":"Change-Id: I9a99f10526f8e466ac04b035121b24be70a23dae"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"736346c5_7fde30b3","line":19,"updated":"2025-02-04 17:49:28.000000000","message":"Given we\u0027re talking with Sean right now about confusion over \"bump\".. I wonder if it would be clearer to say \"update\" here. Normally a version \"bump\" refers to adding one to the version to denote some change, which already happened when 1.5 was written. It\u0027s the lack of \"updating\" the version _to_ the bump that was missed.\n\nAnyway, not critical to change this just for that verbiage, but it might be clearer for posterity.\n\nI also feel like words that say \"make the version patch the schema\" or \"update the version to match the schema that we migrated the data to\" might be helpful in understanding what we\u0027re doing here (and failed to do initially).","commit_id":"cb464bc9697d03d7b100dfc6ada88e7f5762ee00"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3638a144bce968becf7fccc1b67aaec75b2e66ee","unresolved":false,"context_lines":[{"line_number":16,"context_line":"data loss."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"So this change modified the data migration to also bump the ovo version"},{"line_number":19,"context_line":"in the DB."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Closes-Bug: #2097359"},{"line_number":22,"context_line":"Change-Id: I9a99f10526f8e466ac04b035121b24be70a23dae"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"8cada739_7a8b8577","line":19,"in_reply_to":"736346c5_7fde30b3","updated":"2025-02-07 11:24:51.000000000","message":"Done","commit_id":"cb464bc9697d03d7b100dfc6ada88e7f5762ee00"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6f88662fecc450f89edcbc223cd6a70c50e9b202","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"So this change modified the data migration to also update the ovo version"},{"line_number":19,"context_line":"in the DB so that the version string in the DB matches the schema the"},{"line_number":20,"context_line":"data uses in the DB."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Related-Bug: #2097359"},{"line_number":23,"context_line":"Change-Id: I9a99f10526f8e466ac04b035121b24be70a23dae"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3f317073_1f73a057","line":20,"updated":"2025-02-14 15:48:07.000000000","message":"I see, thanks for the detailed explanation","commit_id":"643a6a8a57945ceb1bf3c5971be2aeb3efd4fa72"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a00ddb5cf41719fc60df761cf3ef4e4bb6609954","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"15c7a3ae_47ab14d3","updated":"2025-02-04 17:49:28.000000000","message":"Suggestion in the commit message but not critical.","commit_id":"cb464bc9697d03d7b100dfc6ada88e7f5762ee00"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f79873ee3bbfd1cf4ee729bb5f531288dc31869d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"7a5c5e9b_ec927d6d","updated":"2025-02-07 10:10:12.000000000","message":"Working on a split and fixes...","commit_id":"c45214998e448a8b3303e02938dea1e21ff83baa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"efcd36e25dad1496fd18b67843b9ca4c8e5d3d52","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d38c4020_13d458e9","updated":"2025-02-05 17:10:19.000000000","message":"unit test failure is relevant. I need to take a look","commit_id":"c45214998e448a8b3303e02938dea1e21ff83baa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f1e5b467a29cfca5e766cb8a9a5d7700319e0089","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"5e58ab85_d4cc3341","updated":"2025-02-07 14:51:07.000000000","message":"recheck unrelated devstack fail\n\nThanks for splitting!","commit_id":"643a6a8a57945ceb1bf3c5971be2aeb3efd4fa72"}],"nova/objects/instance_numa.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"44e889aa46cbb2e949c8e722be557c4a8328d1bb","unresolved":true,"context_lines":[{"line_number":202,"context_line":"            else:"},{"line_number":203,"context_line":"                if \u0027pcpuset\u0027 not in cell:"},{"line_number":204,"context_line":"                    cell.pcpuset \u003d set()"},{"line_number":205,"context_line":"                    cell.VERSION \u003d cell.__class__.VERSION"},{"line_number":206,"context_line":"                    update_db \u003d True"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        return update_db"}],"source_content_type":"text/x-python","patch_set":2,"id":"49520e82_496966bd","line":205,"updated":"2025-02-03 18:03:40.000000000","message":"This is probably not well defined for us, but.. I wonder if we should be setting this to 1.5 and not just \"current version\" since there could be other migrations that have not run yet, which means this is not actually our version...?","commit_id":"792b16c1f1d10c0fe1308caa1c0cdbfd57ae5f97"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"59d73790781a7a158a12a003dfc5bd4e48583fab","unresolved":true,"context_lines":[{"line_number":202,"context_line":"            else:"},{"line_number":203,"context_line":"                if \u0027pcpuset\u0027 not in cell:"},{"line_number":204,"context_line":"                    cell.pcpuset \u003d set()"},{"line_number":205,"context_line":"                    cell.VERSION \u003d cell.__class__.VERSION"},{"line_number":206,"context_line":"                    update_db \u003d True"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        return update_db"}],"source_content_type":"text/x-python","patch_set":2,"id":"58471622_ce298c46","line":205,"in_reply_to":"49520e82_496966bd","updated":"2025-02-04 12:11:01.000000000","message":"Very good point. We should not be setting eagerly to the maximum as that might skip other migrations. If I set this to 1.5 here then DB records will have 1.5 even though it could have 1.6 as well as the last version bump is for supporting mixed cpu_policy but that does not require data migration when the data is ported forward. What would be a generic way to ensure that the data in the DB is eventually moved to the latest supported version, i.e. 1.6?","commit_id":"792b16c1f1d10c0fe1308caa1c0cdbfd57ae5f97"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d916dd5db7ab5d9142bafa231e8170fd2b6fbcf0","unresolved":true,"context_lines":[{"line_number":202,"context_line":"            else:"},{"line_number":203,"context_line":"                if \u0027pcpuset\u0027 not in cell:"},{"line_number":204,"context_line":"                    cell.pcpuset \u003d set()"},{"line_number":205,"context_line":"                    cell.VERSION \u003d cell.__class__.VERSION"},{"line_number":206,"context_line":"                    update_db \u003d True"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        return update_db"}],"source_content_type":"text/x-python","patch_set":2,"id":"58ae2aff_f9ee3a48","line":205,"in_reply_to":"58471622_ce298c46","updated":"2025-02-04 17:23:19.000000000","message":"I fixed the over eager version bump and instead hardcoded 1.6 there based on our \ntodays call. 1.5 would be logical there as pcpuset was added in 1.5. But we don\u0027t have code to bump the version to 1.6 (latest) so I used the opportunity to do that bump. Note that 1.5 data is forward compatible with 1.6 version so no data migration needed. But having data kept on 1.5 might open the door for another bug where an instance with 1.5 is resized to a flavor with cpu_policy\u003dmixed causing a similar data inconsistency in the DB that we are fixing here.","commit_id":"792b16c1f1d10c0fe1308caa1c0cdbfd57ae5f97"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a00ddb5cf41719fc60df761cf3ef4e4bb6609954","unresolved":false,"context_lines":[{"line_number":202,"context_line":"            else:"},{"line_number":203,"context_line":"                if \u0027pcpuset\u0027 not in cell:"},{"line_number":204,"context_line":"                    cell.pcpuset \u003d set()"},{"line_number":205,"context_line":"                    cell.VERSION \u003d cell.__class__.VERSION"},{"line_number":206,"context_line":"                    update_db \u003d True"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"        return update_db"}],"source_content_type":"text/x-python","patch_set":2,"id":"a9cd205a_aaa24ca1","line":205,"in_reply_to":"58ae2aff_f9ee3a48","updated":"2025-02-04 17:49:28.000000000","message":"Acknowledged","commit_id":"792b16c1f1d10c0fe1308caa1c0cdbfd57ae5f97"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a00ddb5cf41719fc60df761cf3ef4e4bb6609954","unresolved":true,"context_lines":[{"line_number":200,"context_line":"            # is a forward compatible change we don\u0027t have a specific data"},{"line_number":201,"context_line":"            # migration for it. But we also don\u0027t have an automated way to bump"},{"line_number":202,"context_line":"            # old object versions from 1.5 to 1.6. So we do it here just to"},{"line_number":203,"context_line":"            # avoid inconsistency between data and version in the DB."},{"line_number":204,"context_line":"            if cell.cpu_policy \u003d\u003d obj_fields.CPUAllocationPolicy.DEDICATED:"},{"line_number":205,"context_line":"                cell.pcpuset \u003d cell.cpuset"},{"line_number":206,"context_line":"                cell.cpuset \u003d set()"}],"source_content_type":"text/x-python","patch_set":5,"id":"d9445412_659517fc","line":203,"updated":"2025-02-04 17:49:28.000000000","message":"Yeah, this is helpful. I think we probably could have done better by naming this method something different, like \"upgrade object to current\" or something, to encourage authors of future versions to put their logic here. That would mean we\u0027d exit this method fully updated.\n\nBut, better to not change the name now given how many releases it\u0027s been this way.","commit_id":"cb464bc9697d03d7b100dfc6ada88e7f5762ee00"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f1e5b467a29cfca5e766cb8a9a5d7700319e0089","unresolved":false,"context_lines":[{"line_number":200,"context_line":"            # is a forward compatible change we don\u0027t have a specific data"},{"line_number":201,"context_line":"            # migration for it. But we also don\u0027t have an automated way to bump"},{"line_number":202,"context_line":"            # old object versions from 1.5 to 1.6. So we do it here just to"},{"line_number":203,"context_line":"            # avoid inconsistency between data and version in the DB."},{"line_number":204,"context_line":"            if cell.cpu_policy \u003d\u003d obj_fields.CPUAllocationPolicy.DEDICATED:"},{"line_number":205,"context_line":"                cell.pcpuset \u003d cell.cpuset"},{"line_number":206,"context_line":"                cell.cpuset \u003d set()"}],"source_content_type":"text/x-python","patch_set":5,"id":"e3ba7659_300e20e1","line":203,"in_reply_to":"b4c2ad88_c1725eb1","updated":"2025-02-07 14:51:07.000000000","message":"Acknowledged","commit_id":"cb464bc9697d03d7b100dfc6ada88e7f5762ee00"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3638a144bce968becf7fccc1b67aaec75b2e66ee","unresolved":true,"context_lines":[{"line_number":200,"context_line":"            # is a forward compatible change we don\u0027t have a specific data"},{"line_number":201,"context_line":"            # migration for it. But we also don\u0027t have an automated way to bump"},{"line_number":202,"context_line":"            # old object versions from 1.5 to 1.6. So we do it here just to"},{"line_number":203,"context_line":"            # avoid inconsistency between data and version in the DB."},{"line_number":204,"context_line":"            if cell.cpu_policy \u003d\u003d obj_fields.CPUAllocationPolicy.DEDICATED:"},{"line_number":205,"context_line":"                cell.pcpuset \u003d cell.cpuset"},{"line_number":206,"context_line":"                cell.cpuset \u003d set()"}],"source_content_type":"text/x-python","patch_set":5,"id":"b4c2ad88_c1725eb1","line":203,"in_reply_to":"d9445412_659517fc","updated":"2025-02-07 11:24:51.000000000","message":"Yeah, maybe a master only change that cleans up the naming is in order. But not a backport of that. I first want to play with having a generic unit test that can find these kind of missing code to have more context and then decide what to do on master or in the future to avoid these.","commit_id":"cb464bc9697d03d7b100dfc6ada88e7f5762ee00"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a00ddb5cf41719fc60df761cf3ef4e4bb6609954","unresolved":true,"context_lines":[{"line_number":204,"context_line":"            if cell.cpu_policy \u003d\u003d obj_fields.CPUAllocationPolicy.DEDICATED:"},{"line_number":205,"context_line":"                cell.pcpuset \u003d cell.cpuset"},{"line_number":206,"context_line":"                cell.cpuset \u003d set()"},{"line_number":207,"context_line":"                cell.VERSION \u003d \u00271.6\u0027"},{"line_number":208,"context_line":"                update_db \u003d True"},{"line_number":209,"context_line":"            else:"},{"line_number":210,"context_line":"                if \u0027pcpuset\u0027 not in cell:"}],"source_content_type":"text/x-python","patch_set":5,"id":"8077191f_c7980e57","line":207,"updated":"2025-02-04 17:49:28.000000000","message":"If we made the change to have this be \"upgrade to current version\" then it might make sense to go back to your `__class__.VERSION` approach, but I think given the circumstances, it\u0027s best to be explicit here.","commit_id":"cb464bc9697d03d7b100dfc6ada88e7f5762ee00"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3638a144bce968becf7fccc1b67aaec75b2e66ee","unresolved":false,"context_lines":[{"line_number":204,"context_line":"            if cell.cpu_policy \u003d\u003d obj_fields.CPUAllocationPolicy.DEDICATED:"},{"line_number":205,"context_line":"                cell.pcpuset \u003d cell.cpuset"},{"line_number":206,"context_line":"                cell.cpuset \u003d set()"},{"line_number":207,"context_line":"                cell.VERSION \u003d \u00271.6\u0027"},{"line_number":208,"context_line":"                update_db \u003d True"},{"line_number":209,"context_line":"            else:"},{"line_number":210,"context_line":"                if \u0027pcpuset\u0027 not in cell:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a3dd486_72461c1e","line":207,"in_reply_to":"8077191f_c7980e57","updated":"2025-02-07 11:24:51.000000000","message":"Acknowledged","commit_id":"cb464bc9697d03d7b100dfc6ada88e7f5762ee00"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"7eef55a120dbfd563bb4e311e023e7e18e2a43a4","unresolved":true,"context_lines":[{"line_number":207,"context_line":"                cell.VERSION \u003d \u00271.6\u0027"},{"line_number":208,"context_line":"                update_db \u003d True"},{"line_number":209,"context_line":"            else:"},{"line_number":210,"context_line":"                if \u0027pcpuset\u0027 not in cell:"},{"line_number":211,"context_line":"                    cell.pcpuset \u003d set()"},{"line_number":212,"context_line":"                    cell.VERSION \u003d \u00271.6\u0027"},{"line_number":213,"context_line":"                    update_db \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"1a0169d2_b820d9f1","line":210,"range":{"start_line":210,"start_character":16,"end_line":210,"end_character":41},"updated":"2025-02-04 17:56:48.000000000","message":"by the way i think this will not run for obejct that have version 1.4 and pcpuset defiend.\n\nthat an instnace which does not use cpu pinning. was create as 1.4 but was partly migrated by the first attempt to fix this.\n\nso maybe \n\n\n\n```suggestion\n                if \u0027pcpuset\u0027 not in cell or (\u0027pcpuset\u0027 in cell and cell.version \u003d\u003d\u00271.4\u0027):\n```","commit_id":"cb464bc9697d03d7b100dfc6ada88e7f5762ee00"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9a688e39bf0f3c10f0c025bbb333bf393c5093c7","unresolved":true,"context_lines":[{"line_number":207,"context_line":"                cell.VERSION \u003d \u00271.6\u0027"},{"line_number":208,"context_line":"                update_db \u003d True"},{"line_number":209,"context_line":"            else:"},{"line_number":210,"context_line":"                if \u0027pcpuset\u0027 not in cell:"},{"line_number":211,"context_line":"                    cell.pcpuset \u003d set()"},{"line_number":212,"context_line":"                    cell.VERSION \u003d \u00271.6\u0027"},{"line_number":213,"context_line":"                    update_db \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"a9313924_6c84b4d0","line":210,"range":{"start_line":210,"start_character":16,"end_line":210,"end_character":41},"in_reply_to":"1a0169d2_b820d9f1","updated":"2025-02-05 14:22:48.000000000","message":"Yeah I eventually extended the matrix a bit but the basic idea is the same, we need to look at the current version string coming form the DB to decide what to do.","commit_id":"cb464bc9697d03d7b100dfc6ada88e7f5762ee00"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f9d05fbcba6727f0c606730b8a4e219871d44dca","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                cell.VERSION \u003d \u00271.6\u0027"},{"line_number":208,"context_line":"                update_db \u003d True"},{"line_number":209,"context_line":"            else:"},{"line_number":210,"context_line":"                if \u0027pcpuset\u0027 not in cell:"},{"line_number":211,"context_line":"                    cell.pcpuset \u003d set()"},{"line_number":212,"context_line":"                    cell.VERSION \u003d \u00271.6\u0027"},{"line_number":213,"context_line":"                    update_db \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"338c5869_674aa387","line":210,"range":{"start_line":210,"start_character":16,"end_line":210,"end_character":41},"in_reply_to":"a9313924_6c84b4d0","updated":"2025-02-12 13:00:13.000000000","message":"Done","commit_id":"cb464bc9697d03d7b100dfc6ada88e7f5762ee00"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5d5f9cafd1fc654fb9c832a3989ea352b0a998d4","unresolved":true,"context_lines":[{"line_number":174,"context_line":"                cls._save_migrated_cpuset_to_instance_extra("},{"line_number":175,"context_line":"                    context, obj, instance_uuid)"},{"line_number":176,"context_line":"        else:"},{"line_number":177,"context_line":"            obj \u003d cls._migrate_legacy_object(context, instance_uuid, primitive)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        return obj"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"1310293f_f85f404d","line":177,"updated":"2025-02-05 14:58:45.000000000","message":"Could you add a comment here similar to your new one you added at L250? I think that the next person could easily add a new thing and not see the comment in that inner function, since it doesn\u0027t apply to them. It might also be good to add it up in/near the version history comments.","commit_id":"c45214998e448a8b3303e02938dea1e21ff83baa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3638a144bce968becf7fccc1b67aaec75b2e66ee","unresolved":true,"context_lines":[{"line_number":174,"context_line":"                cls._save_migrated_cpuset_to_instance_extra("},{"line_number":175,"context_line":"                    context, obj, instance_uuid)"},{"line_number":176,"context_line":"        else:"},{"line_number":177,"context_line":"            obj \u003d cls._migrate_legacy_object(context, instance_uuid, primitive)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        return obj"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"16ab3111_9fef5af7","line":177,"in_reply_to":"1310293f_f85f404d","updated":"2025-02-07 11:24:51.000000000","message":"As next update happens in the future we can instead refactor on master to guide the next person better. Here is my first attempt to have a better structure of this code: https://review.opendev.org/c/openstack/nova/+/940958/1 This is WIP and strict not intended to be backported.","commit_id":"c45214998e448a8b3303e02938dea1e21ff83baa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f1e5b467a29cfca5e766cb8a9a5d7700319e0089","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                cls._save_migrated_cpuset_to_instance_extra("},{"line_number":175,"context_line":"                    context, obj, instance_uuid)"},{"line_number":176,"context_line":"        else:"},{"line_number":177,"context_line":"            obj \u003d cls._migrate_legacy_object(context, instance_uuid, primitive)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"        return obj"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"4a257504_0b23a343","line":177,"in_reply_to":"16ab3111_9fef5af7","updated":"2025-02-07 14:51:07.000000000","message":"Acknowledged","commit_id":"c45214998e448a8b3303e02938dea1e21ff83baa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5d5f9cafd1fc654fb9c832a3989ea352b0a998d4","unresolved":true,"context_lines":[{"line_number":229,"context_line":"                    # stamp the new version in the DB"},{"line_number":230,"context_line":"                    cell.pcpuset \u003d set()"},{"line_number":231,"context_line":"                    cell.VERSION \u003d \u00271.6\u0027"},{"line_number":232,"context_line":"                    update_db \u003d True"},{"line_number":233,"context_line":"                else:  # obj_fields.CPUAllocationPolicy.MIXED"},{"line_number":234,"context_line":"                    # This means the cell data already got updated to the 1.6"},{"line_number":235,"context_line":"                    # content as MIXED only supported with 1.6 but the version"}],"source_content_type":"text/x-python","patch_set":6,"id":"77c6f410_cb6efea1","line":232,"updated":"2025-02-05 14:58:45.000000000","message":"TBH, I\u0027m not sure I grokked initially that we were basically always up-migrating the object when we load it. I\u0027m really not sure that\u0027s worth the cost, especially given the behavior we now know will ensue for no reason if we have an old compute, new conductor, and a policy\u003d\u003dshared object with no real transformation needed.\n\nI\u0027m not saying you should change it now, I\u0027m just...noting.","commit_id":"c45214998e448a8b3303e02938dea1e21ff83baa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e57d72f4609a1566a3bbe9761fd233ce04914ac4","unresolved":true,"context_lines":[{"line_number":229,"context_line":"                    # stamp the new version in the DB"},{"line_number":230,"context_line":"                    cell.pcpuset \u003d set()"},{"line_number":231,"context_line":"                    cell.VERSION \u003d \u00271.6\u0027"},{"line_number":232,"context_line":"                    update_db \u003d True"},{"line_number":233,"context_line":"                else:  # obj_fields.CPUAllocationPolicy.MIXED"},{"line_number":234,"context_line":"                    # This means the cell data already got updated to the 1.6"},{"line_number":235,"context_line":"                    # content as MIXED only supported with 1.6 but the version"}],"source_content_type":"text/x-python","patch_set":6,"id":"f7860d2c_e6d1f0e6","line":232,"in_reply_to":"4896ad66_89625c0e","updated":"2025-02-10 15:43:47.000000000","message":"\u003e that might be, but that not how alot of this code has really been written. any time we have ever discussed the addtion of feild to the numa code or modified it it was always done assumeing we always get the newest supported version supported by the current hsot.\n\nBy \"this code\" do you mean the numa code? If so, I think that\u0027s just an unfortunate misunderstanding about how this stuff works. The whole point of the semver\u0027ing of these objects is because we can always receive an older version from an older node and that\u0027s why we have rules about how objects can evolve (and why a major version bump has to be covered by supporting both for at least one release).\n\nSo if you\u0027re asserting that all the NUMA code is wrong, I\u0027ll totally believe you based on what we\u0027ve seen, but I think it\u0027s wrong to assert that about the rest of the nova code.\n\n\u003e we have not writen any of this code to fall back to using old ways of looking upthe data form older verions of the object. the design of the code depends on using a uplaeveled obejct.\n\nWell, as you can see, that\u0027s just not a thing since there\u0027s no up-leveling currently. Assuming an object always came directly from new conductor is just not reasonable, IMHO, since we get objects through all sorts of routes. I assume this interpretation of how things work came from the fact that we *usually* construct an object from columns by a node that is running the latest code, and then pass it along the line, backleveling as necessary. However, any communication between nodes will not follow this process, and especially objects related to the host and instance resource layout are prime candidates for needing to be passed between computes of varying versions. So, I\u0027d really encourage thinking about this problem as correcting any code based on this bad assumption instead of trying to change everything to now support that assumption.","commit_id":"c45214998e448a8b3303e02938dea1e21ff83baa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f1e5b467a29cfca5e766cb8a9a5d7700319e0089","unresolved":true,"context_lines":[{"line_number":229,"context_line":"                    # stamp the new version in the DB"},{"line_number":230,"context_line":"                    cell.pcpuset \u003d set()"},{"line_number":231,"context_line":"                    cell.VERSION \u003d \u00271.6\u0027"},{"line_number":232,"context_line":"                    update_db \u003d True"},{"line_number":233,"context_line":"                else:  # obj_fields.CPUAllocationPolicy.MIXED"},{"line_number":234,"context_line":"                    # This means the cell data already got updated to the 1.6"},{"line_number":235,"context_line":"                    # content as MIXED only supported with 1.6 but the version"}],"source_content_type":"text/x-python","patch_set":6,"id":"bf124138_b851efdd","line":232,"in_reply_to":"70acbbb1_4f49b3e8","updated":"2025-02-07 14:51:07.000000000","message":"I don\u0027t think that\u0027s valid behavior though. If the client (compute in this case I assume) receives an object, there\u0027s no guarantee that it\u0027s the newest version. Usually it should be, since we usually get that object from conductor, which should always be newer than us. However, if we get an object from another compute because of a migration or something, or even a load-from-db during an evacuation, it could be older. Point being, that if field X was added in version Y, I think the forward-compatible behavior is to not assume it\u0027s there.","commit_id":"c45214998e448a8b3303e02938dea1e21ff83baa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3638a144bce968becf7fccc1b67aaec75b2e66ee","unresolved":true,"context_lines":[{"line_number":229,"context_line":"                    # stamp the new version in the DB"},{"line_number":230,"context_line":"                    cell.pcpuset \u003d set()"},{"line_number":231,"context_line":"                    cell.VERSION \u003d \u00271.6\u0027"},{"line_number":232,"context_line":"                    update_db \u003d True"},{"line_number":233,"context_line":"                else:  # obj_fields.CPUAllocationPolicy.MIXED"},{"line_number":234,"context_line":"                    # This means the cell data already got updated to the 1.6"},{"line_number":235,"context_line":"                    # content as MIXED only supported with 1.6 but the version"}],"source_content_type":"text/x-python","patch_set":6,"id":"70acbbb1_4f49b3e8","line":232,"in_reply_to":"77c6f410_cb6efea1","updated":"2025-02-07 11:24:51.000000000","message":"We need to upmigrate even the objects with cpu_policy shared otherwise client code on \u003e\u003d 1.5 will fail when it rightfully try to access the pcpuset field of the cell object. The upmigration ensurse that the field is there if the code is new.","commit_id":"c45214998e448a8b3303e02938dea1e21ff83baa"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b85a931d34f75f32ac52e80975d16d9519736388","unresolved":true,"context_lines":[{"line_number":229,"context_line":"                    # stamp the new version in the DB"},{"line_number":230,"context_line":"                    cell.pcpuset \u003d set()"},{"line_number":231,"context_line":"                    cell.VERSION \u003d \u00271.6\u0027"},{"line_number":232,"context_line":"                    update_db \u003d True"},{"line_number":233,"context_line":"                else:  # obj_fields.CPUAllocationPolicy.MIXED"},{"line_number":234,"context_line":"                    # This means the cell data already got updated to the 1.6"},{"line_number":235,"context_line":"                    # content as MIXED only supported with 1.6 but the version"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff3c3a1f_af556a6c","line":232,"in_reply_to":"9625b5f2_ba16dbef","updated":"2025-02-15 18:54:18.000000000","message":"right so my general point is the understanding dan had is not what was understood by me or those working on the numa and pci handling code.\nthis is kind of a special case however so  with that said i think we have mostly got away with it till now.\n\nI agree we should not hold this up on legacy design discussion.","commit_id":"c45214998e448a8b3303e02938dea1e21ff83baa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"1f3221995dcdcca7ceed8f1219e3211921109809","unresolved":true,"context_lines":[{"line_number":229,"context_line":"                    # stamp the new version in the DB"},{"line_number":230,"context_line":"                    cell.pcpuset \u003d set()"},{"line_number":231,"context_line":"                    cell.VERSION \u003d \u00271.6\u0027"},{"line_number":232,"context_line":"                    update_db \u003d True"},{"line_number":233,"context_line":"                else:  # obj_fields.CPUAllocationPolicy.MIXED"},{"line_number":234,"context_line":"                    # This means the cell data already got updated to the 1.6"},{"line_number":235,"context_line":"                    # content as MIXED only supported with 1.6 but the version"}],"source_content_type":"text/x-python","patch_set":6,"id":"0724b708_25e4d3ba","line":232,"in_reply_to":"bf124138_b851efdd","updated":"2025-02-10 10:51:27.000000000","message":"I think I see your point. If the object states that it is in version 1.4, even if it is held by an object code that is 1.6, the user of the object cannot assume that the pcpuset field is present. Unfortunately my brain always ends up relying on the contract the **class in the code** defines (probably too much OOP exposure in my past). Anyhow this basically means that all the client code needs to have logic that supports older object version as the new object code itself cannot hide the internal data versioning. In this particular case somewhere in the client code we miss a `pcpuset in obj` logic. I don\u0027t like it but I accept that this is how nova is designed.\n\nI guess this also mean that https://bugs.launchpad.net/nova/+bug/2080556 should have been fixed differently. Instead of fixing the migration code we should have fixed the client code that tries to read pcpuset from the object.","commit_id":"c45214998e448a8b3303e02938dea1e21ff83baa"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"674fe76cd2b5992294ff372078c802ec2ed1bf6c","unresolved":true,"context_lines":[{"line_number":229,"context_line":"                    # stamp the new version in the DB"},{"line_number":230,"context_line":"                    cell.pcpuset \u003d set()"},{"line_number":231,"context_line":"                    cell.VERSION \u003d \u00271.6\u0027"},{"line_number":232,"context_line":"                    update_db \u003d True"},{"line_number":233,"context_line":"                else:  # obj_fields.CPUAllocationPolicy.MIXED"},{"line_number":234,"context_line":"                    # This means the cell data already got updated to the 1.6"},{"line_number":235,"context_line":"                    # content as MIXED only supported with 1.6 but the version"}],"source_content_type":"text/x-python","patch_set":6,"id":"4896ad66_89625c0e","line":232,"in_reply_to":"bf124138_b851efdd","updated":"2025-02-10 10:52:54.000000000","message":"that might be, but that not how alot of this code has really been written. any time we have ever discussed the addtion of feild to the numa code or modified it it was always done assumeing we always get the newest supported version supported by the current hsot.\n\nthat not nessisarly the newest verion supported by the deployment.\n\nour numa migration code generall transfer any numa related info via seperate migration data objects and we have compute service version check or check in prelive migration ectra to make sure both hosts are upgraded.\n\nwe have not writen any of this code to fall back to using old ways of looking upthe data form older verions of the object. the design of the code depends on using a uplaeveled obejct.","commit_id":"c45214998e448a8b3303e02938dea1e21ff83baa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f9d05fbcba6727f0c606730b8a4e219871d44dca","unresolved":true,"context_lines":[{"line_number":229,"context_line":"                    # stamp the new version in the DB"},{"line_number":230,"context_line":"                    cell.pcpuset \u003d set()"},{"line_number":231,"context_line":"                    cell.VERSION \u003d \u00271.6\u0027"},{"line_number":232,"context_line":"                    update_db \u003d True"},{"line_number":233,"context_line":"                else:  # obj_fields.CPUAllocationPolicy.MIXED"},{"line_number":234,"context_line":"                    # This means the cell data already got updated to the 1.6"},{"line_number":235,"context_line":"                    # content as MIXED only supported with 1.6 but the version"}],"source_content_type":"text/x-python","patch_set":6,"id":"9625b5f2_ba16dbef","line":232,"in_reply_to":"f7860d2c_e6d1f0e6","updated":"2025-02-12 13:00:13.000000000","message":"While this debate is interesting I don\u0027t think this should hold up landing this fix. E.g. this fix does not change the fact that pcpuset field is added by the forward porting of the object even for cpu_policy\u003dshared. That was there in the baseline.","commit_id":"c45214998e448a8b3303e02938dea1e21ff83baa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"5d5f9cafd1fc654fb9c832a3989ea352b0a998d4","unresolved":true,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"            # When the next ovo version 1.7 is added it needs to be handed"},{"line_number":251,"context_line":"            # here to do any migration if needed and to ensure the version in"},{"line_number":252,"context_line":"            # the DB is stamped to 1.7"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        return update_db"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7acebe14_41dcd0c9","line":252,"updated":"2025-02-05 14:58:45.000000000","message":"I mentioned to gibi on IRC and mentioned on the patch before. I personally think that the fix to the code to make it behave like it always should, should be a separate patch from the thing that tries to clean up old installations that have already been affected by the bug. What is above here is a lot more complicated than what was here before and it would be a lot easier to reason about the two changes separately I think. I know that\u0027s more backport work, and I\u0027ll surely defer to the group, but just MHO.","commit_id":"c45214998e448a8b3303e02938dea1e21ff83baa"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f1e5b467a29cfca5e766cb8a9a5d7700319e0089","unresolved":false,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"            # When the next ovo version 1.7 is added it needs to be handed"},{"line_number":251,"context_line":"            # here to do any migration if needed and to ensure the version in"},{"line_number":252,"context_line":"            # the DB is stamped to 1.7"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        return update_db"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"48c8e8b7_db3b2297","line":252,"in_reply_to":"2df5ab8b_3071d922","updated":"2025-02-07 14:51:07.000000000","message":"Done","commit_id":"c45214998e448a8b3303e02938dea1e21ff83baa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"77ff4d79f72aced4b14040cc827c5ba256d6fb38","unresolved":true,"context_lines":[{"line_number":249,"context_line":""},{"line_number":250,"context_line":"            # When the next ovo version 1.7 is added it needs to be handed"},{"line_number":251,"context_line":"            # here to do any migration if needed and to ensure the version in"},{"line_number":252,"context_line":"            # the DB is stamped to 1.7"},{"line_number":253,"context_line":""},{"line_number":254,"context_line":"        return update_db"},{"line_number":255,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"2df5ab8b_3071d922","line":252,"in_reply_to":"7acebe14_41dcd0c9","updated":"2025-02-07 10:35:50.000000000","message":"I split the change so there is a 3rd patch in the series https://review.opendev.org/c/openstack/nova/+/940953","commit_id":"c45214998e448a8b3303e02938dea1e21ff83baa"}],"nova/tests/unit/objects/test_instance_numa.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d54ad35b608e3b5001ba60f749098ac41966a679","unresolved":true,"context_lines":[{"line_number":447,"context_line":"        self.assertEqual(set(), topo_loaded.cells[0].cpuset)"},{"line_number":448,"context_line":"        self.assertEqual({0, 1}, topo_loaded.cells[0].pcpuset)"},{"line_number":449,"context_line":"        # and the version is bumped to 1.6"},{"line_number":450,"context_line":"        self.assertEqual(\u00271.6\u0027, topo_loaded.cells[0].VERSION)"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"class TestInstanceNUMATopology("}],"source_content_type":"text/x-python","patch_set":5,"id":"6c37274d_6be1fc5f","line":450,"updated":"2025-02-04 17:51:01.000000000","message":"Sean had a good point over slack that we need to test what happens with those objects that are already in the DB with version on 1.4 but data on 1.6.","commit_id":"cb464bc9697d03d7b100dfc6ada88e7f5762ee00"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9a688e39bf0f3c10f0c025bbb333bf393c5093c7","unresolved":true,"context_lines":[{"line_number":447,"context_line":"        self.assertEqual(set(), topo_loaded.cells[0].cpuset)"},{"line_number":448,"context_line":"        self.assertEqual({0, 1}, topo_loaded.cells[0].pcpuset)"},{"line_number":449,"context_line":"        # and the version is bumped to 1.6"},{"line_number":450,"context_line":"        self.assertEqual(\u00271.6\u0027, topo_loaded.cells[0].VERSION)"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"class TestInstanceNUMATopology("}],"source_content_type":"text/x-python","patch_set":5,"id":"46ca8b57_c0cf18b2","line":450,"in_reply_to":"28a9c308_0651b094","updated":"2025-02-05 14:22:48.000000000","message":"I can split the code if needed into two patches but I think we need to backport both so I added the code in this patch. Let me know if I should split.","commit_id":"cb464bc9697d03d7b100dfc6ada88e7f5762ee00"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3638a144bce968becf7fccc1b67aaec75b2e66ee","unresolved":false,"context_lines":[{"line_number":447,"context_line":"        self.assertEqual(set(), topo_loaded.cells[0].cpuset)"},{"line_number":448,"context_line":"        self.assertEqual({0, 1}, topo_loaded.cells[0].pcpuset)"},{"line_number":449,"context_line":"        # and the version is bumped to 1.6"},{"line_number":450,"context_line":"        self.assertEqual(\u00271.6\u0027, topo_loaded.cells[0].VERSION)"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"class TestInstanceNUMATopology("}],"source_content_type":"text/x-python","patch_set":5,"id":"1abd67a7_2938c4d1","line":450,"in_reply_to":"46ca8b57_c0cf18b2","updated":"2025-02-07 11:24:51.000000000","message":"Now it is split into two separate patches","commit_id":"cb464bc9697d03d7b100dfc6ada88e7f5762ee00"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fa28d9149db5324b82889192ddecae64808eb290","unresolved":true,"context_lines":[{"line_number":447,"context_line":"        self.assertEqual(set(), topo_loaded.cells[0].cpuset)"},{"line_number":448,"context_line":"        self.assertEqual({0, 1}, topo_loaded.cells[0].pcpuset)"},{"line_number":449,"context_line":"        # and the version is bumped to 1.6"},{"line_number":450,"context_line":"        self.assertEqual(\u00271.6\u0027, topo_loaded.cells[0].VERSION)"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":""},{"line_number":453,"context_line":"class TestInstanceNUMATopology("}],"source_content_type":"text/x-python","patch_set":5,"id":"28a9c308_0651b094","line":450,"in_reply_to":"6c37274d_6be1fc5f","updated":"2025-02-04 17:53:38.000000000","message":"It won\u0027t run because it doesn\u0027t key off the version right? The data will look migrated so it will go ahead and ignore it I think.\n\nIf we\u0027re going to add a mitigation for existing deployments, I think it might be best to have that as a separate patch? It\u0027s more work yes, but it feels like fixing the original problem and effectively adding a new migration to fix the old deployments are two separate tasks.","commit_id":"cb464bc9697d03d7b100dfc6ada88e7f5762ee00"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9651f7add70d7e4db8ca50ac9fe4c1383f00567c","unresolved":true,"context_lines":[{"line_number":555,"context_line":"        self.assertEqual({0, 1}, topo_loaded.cells[0].cpuset)"},{"line_number":556,"context_line":"        self.assertEqual({2, 3}, topo_loaded.cells[0].pcpuset)"},{"line_number":557,"context_line":"        # but the version is bumped to 1.6"},{"line_number":558,"context_line":"        self.assertEqual(\u00271.6\u0027, topo_loaded.cells[0].VERSION)"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"class TestInstanceNUMATopology("}],"source_content_type":"text/x-python","patch_set":6,"id":"9cae39f7_b9404686","line":558,"updated":"2025-02-05 15:02:53.000000000","message":"Also assert that it\u0027s still `MIXED`? This might just be an assertion to make sure we never disallow MIXED if it was stored incorrectly in 1.4 with that policy and we assumed it wasn\u0027t possible or something?","commit_id":"c45214998e448a8b3303e02938dea1e21ff83baa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"46e8f48f69f6a86fdc78287af2e4612c08810e1c","unresolved":false,"context_lines":[{"line_number":555,"context_line":"        self.assertEqual({0, 1}, topo_loaded.cells[0].cpuset)"},{"line_number":556,"context_line":"        self.assertEqual({2, 3}, topo_loaded.cells[0].pcpuset)"},{"line_number":557,"context_line":"        # but the version is bumped to 1.6"},{"line_number":558,"context_line":"        self.assertEqual(\u00271.6\u0027, topo_loaded.cells[0].VERSION)"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":""},{"line_number":561,"context_line":"class TestInstanceNUMATopology("}],"source_content_type":"text/x-python","patch_set":6,"id":"b1bcd1cd_21dd6000","line":558,"in_reply_to":"9cae39f7_b9404686","updated":"2025-02-07 11:30:06.000000000","message":"Done in https://review.opendev.org/c/openstack/nova/+/940953","commit_id":"c45214998e448a8b3303e02938dea1e21ff83baa"}]}
