)]}'
{"id":"openstack%2Fnova~1004411","triplet_id":"openstack%2Fnova~master~I37d9457f288a2ddb81ad6b63cac51c8702a23e6a","project":"openstack/nova","branch":"master","topic":"fix/2166652","attention_set":{"36739":{"account":{"_account_id":36739,"name":"HyungJoon Kim","display_name":"hjoon87.kim","email":"hjoon87.kim@samsung.com","username":"hjoon87.kim"},"last_update":"2026-09-07 13:14:00.000000000","reason":"Someone else replied on the change"}},"removed_from_attention_set":{},"hashtags":[],"change_id":"I37d9457f288a2ddb81ad6b63cac51c8702a23e6a","subject":"Sort claimed PCI devices by host PCI address","status":"NEW","created":"2026-09-07 11:10:13.000000000","updated":"2026-09-07 13:14:00.000000000","submit_type":"MERGE_IF_NECESSARY","mergeable":true,"submittable":false,"total_comment_count":0,"unresolved_comment_count":0,"has_review_started":true,"meta_rev_id":"8fcfc9b2bec427e632ca5fc9128955ef3ec604ad","_number":1004411,"virtual_id_number":1004411,"owner":{"_account_id":36739,"name":"HyungJoon Kim","display_name":"hjoon87.kim","email":"hjoon87.kim@samsung.com","username":"hjoon87.kim"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:check","value":1,"date":"2026-09-07 13:13:50.000000000","permitted_voting_range":{"min":-2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","value":1,"default_value":0,"optional":true},"Code-Review":{"all":[{"value":0,"permitted_voting_range":{"min":-1,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-2":"Do not merge","-1":"This patch needs further work before it can be merged"," 0":"No score","+1":"Looks good to me, but someone else must approve","+2":"Looks good to me (core reviewer)"},"description":"","default_value":0,"optional":true},"Workflow":{"all":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true},"Review-Priority":{"all":[{"value":0,"permitted_voting_range":{"min":0,"max":1},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"values":{" 0":"Default Priority","+1":"Contributor Review Promise","+2":"Core Review Promise"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"REVIEWER":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}],"CC":[{"_account_id":14384,"name":"Quobyte CI","email":"openstack-ci-external@quobyte.com","username":"quobyteci","tags":["SERVICE_USER"]},{"_account_id":34420,"name":"openstack lightbits","display_name":"Lightbits CI","email":"openstack@lightbitslabs.com","username":"openstack_lightbits"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-09-07 11:31:04.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"CC"},{"updated":"2026-09-07 12:07:28.000000000","updated_by":{"_account_id":14384,"name":"Quobyte CI","email":"openstack-ci-external@quobyte.com","username":"quobyteci","tags":["SERVICE_USER"]},"reviewer":{"_account_id":14384,"name":"Quobyte CI","email":"openstack-ci-external@quobyte.com","username":"quobyteci","tags":["SERVICE_USER"]},"state":"CC"},{"updated":"2026-09-07 13:13:50.000000000","updated_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"reviewer":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"state":"REVIEWER"},{"updated":"2026-09-07 13:14:00.000000000","updated_by":{"_account_id":34420,"name":"openstack lightbits","display_name":"Lightbits CI","email":"openstack@lightbitslabs.com","username":"openstack_lightbits"},"reviewer":{"_account_id":34420,"name":"openstack lightbits","display_name":"Lightbits CI","email":"openstack@lightbitslabs.com","username":"openstack_lightbits"},"state":"CC"}],"messages":[{"id":"07bdc5c44b57ecc51271b2ee672afdc92c58c6f7","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":36739,"name":"HyungJoon Kim","display_name":"hjoon87.kim","email":"hjoon87.kim@samsung.com","username":"hjoon87.kim"},"date":"2026-09-07 11:10:13.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"43c7f8cd3fc7d0814046f1ceb1df94d217592ce6","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-07 11:31:04.000000000","message":"Patch Set 1:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/02350135c3d6490f845591ac70940417\n\n- openstack-tox-py311-arm64 https://zuul.opendev.org/t/openstack/build/62a016072d444a3990be36a87047a5a7 : SUCCESS in 14m 21s (non-voting)\n- openstack-tox-py313-arm64 https://zuul.opendev.org/t/openstack/build/6aecd045ea1247a5bcddcdad2f10668c : SUCCESS in 16m 33s (non-voting)\n- openstack-tox-py314-arm64 https://zuul.opendev.org/t/openstack/build/99c0ffa9358f4ed58ecaf303282bf062 : SUCCESS in 17m 44s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"39c7e625c12803787a5cfd3ffc5eaa8b671d2799","author":{"_account_id":14384,"name":"Quobyte CI","email":"openstack-ci-external@quobyte.com","username":"quobyteci","tags":["SERVICE_USER"]},"date":"2026-09-07 12:07:28.000000000","message":"Patch Set 1:\n\nBuild Successful \n\n* quobyteci:  nova_quobyteci : SUCCESS, logs at: https://oscilogs.quobyte.com/logs/I37d9457f288a2ddb81ad6b63cac51c8702a23e6a .","accounts_in_message":[],"_revision_number":1},{"id":"82b55fe1ca707c74352210235ba4d1cab5cfe44d","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-07 13:13:50.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/aa6f75c52468445aa2eea2afb1f27ea3\n\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/0d4cbf272ef94b0a869861fae388d2df : SUCCESS in 1h 01m 24s\n- tempest-integrated-compute https://zuul.opendev.org/t/openstack/build/db3f97f966164f14a2cee99c1ea6a021 : SUCCESS in 1h 17m 44s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/55b2befb392d4fa1b5974c77ef9c749b : SUCCESS in 1h 05m 19s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/85959612919147a3a79d6cb20a372475 : SUCCESS in 59m 40s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/30568f94a3e147ef86329f45bf6e31fb : SUCCESS in 7m 33s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/75a96ea7471546e1831639a77abbeeb7 : SUCCESS in 14m 27s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/0d580f766dab4e00aab2405a12a145e6 : SUCCESS in 12m 58s\n- openstack-tox-py314 https://zuul.opendev.org/t/openstack/build/a347a06e0edd41af9a6b6761b2162720 : SUCCESS in 19m 04s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/cf63e23e7cff4880b205cfec2b3a8a28 : SUCCESS in 13m 13s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/39c9eb201a72435c8d8a0c7fc8baa5bf : SUCCESS in 7m 48s\n- ironic-tempest-bios-ipmi-autodetect https://zuul.opendev.org/t/openstack/build/f31520506f384096b88bbf90a08d944e : SUCCESS in 56m 41s (non-voting)\n- nova-ceph-multistore https://zuul.opendev.org/t/openstack/build/e3f2270a8a324bb98c21084aa3cc5470 : SUCCESS in 1h 34m 20s\n- nova-live-migration https://zuul.opendev.org/t/openstack/build/72f62e105b774130be5ffd2afda3f182 : SUCCESS in 42m 31s\n- nova-whitebox https://zuul.opendev.org/t/openstack/build/35647d2ddadf48e0b0484ee706ed782c : SUCCESS in 38m 09s\n- nova-graceful-shutdown https://zuul.opendev.org/t/openstack/build/8825adc90f7e4683aa27f4b46941525f : SUCCESS in 1h 01m 35s\n- nova-live-migration-ceph https://zuul.opendev.org/t/openstack/build/709a4e011957471d9c02dce91751a865 : SUCCESS in 49m 12s\n- nova-multi-cell https://zuul.opendev.org/t/openstack/build/797b9db23f5e4406806bb6ef2bd2f25e : SUCCESS in 1h 55m 35s\n- nova-next https://zuul.opendev.org/t/openstack/build/0180bb15853443a480470cff769e091a : SUCCESS in 1h 53m 10s\n- nova-alt-configurations https://zuul.opendev.org/t/openstack/build/292d67889c90427aa0e73b520092e90b : SUCCESS in 46m 01s\n- nova-tox-validate-backport https://zuul.opendev.org/t/openstack/build/7db59439038b41139bc7c227ef9d5bcb : SUCCESS in 5m 19s (non-voting)\n- nova-tox-functional-py311 https://zuul.opendev.org/t/openstack/build/f2072b7c0ef64e239a39b275d6f11dd7 : SUCCESS in 32m 54s\n- nova-tox-functional-py313 https://zuul.opendev.org/t/openstack/build/2c58b310809049f08ff572e5b757526a : SUCCESS in 28m 38s\n- nova-tox-functional-py313-threading https://zuul.opendev.org/t/openstack/build/ddc9686b435148d39e75f2d254bd3b1e : SUCCESS in 37m 04s\n- nova-grenade-multinode https://zuul.opendev.org/t/openstack/build/f36cc5f7a8f14143b7037988f3b51afc : SUCCESS in 1h 27m 29s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/d04229c11cc94ec98844dfc91341d1b6 : SUCCESS in 47m 38s\n- cyborg-tempest-py3 https://zuul.opendev.org/t/openstack/build/702ed4ee8aa04991ab425880b11a0f8b : SUCCESS in 47m 26s (non-voting)\n- barbican-tempest-plugin-simple-crypto https://zuul.opendev.org/t/openstack/build/8db36ef6b46a4adf8893f1ab897b8a2f : SUCCESS in 41m 08s (non-voting)\n- nova-tox-py313-threading https://zuul.opendev.org/t/openstack/build/190756ee6d0f42259bf70eb10716eeb7 : SUCCESS in 14m 26s","accounts_in_message":[],"_revision_number":1}],"current_revision_number":1,"current_revision":"87e31b36805bb94425e1593708b3ceb299b956da","revisions":{"87e31b36805bb94425e1593708b3ceb299b956da":{"kind":"REWORK","_number":1,"created":"2026-09-07 11:10:13.000000000","uploader":{"_account_id":36739,"name":"HyungJoon Kim","display_name":"hjoon87.kim","email":"hjoon87.kim@samsung.com","username":"hjoon87.kim"},"ref":"refs/changes/11/1004411/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/nova","ref":"refs/changes/11/1004411/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/nova refs/changes/11/1004411/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/nova refs/changes/11/1004411/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/nova refs/changes/11/1004411/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/nova refs/changes/11/1004411/1"}}},"commit":{"parents":[{"commit":"87bcff6ec6ac51a7884d4358714d2a723cfdd46d","subject":"Add regression test for bug #2166652","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/nova/commit/87bcff6ec6ac51a7884d4358714d2a723cfdd46d"}]}],"author":{"name":"HyungJoon Kim","email":"hjoon87.kim@samsung.com","date":"2026-09-07 11:07:36.000000000","tz":540},"committer":{"name":"HyungJoon Kim","email":"hjoon87.kim@samsung.com","date":"2026-09-07 11:07:36.000000000","tz":540},"subject":"Sort claimed PCI devices by host PCI address","message":"Sort claimed PCI devices by host PCI address\n\nThe order of the \u003chostdev\u003e elements in the guest domain XML decides the\norder in which the guest OS enumerates its passthrough PCI devices.\nPciDeviceStats.consume_requests() returns the devices in the order the\naliases appear in the flavor\u0027s pci_passthrough:alias extra spec and\nPciDevice.allocate() appends them to instance.pci_devices in that same\norder, so on the initial deploy the guest sees the flavor order.\n\nOn a later stop/start the instance is rebuilt from the pci_devices\ntable, whose rows are in host PCI address order, so the very same\ninstance is handed a different BDF layout on its second boot with no\nconfiguration change at all. Topology aware workloads such as multi-GPU\njobs pin themselves to the layout of the first boot and break.\n\nSort the devices claimed for an instance by host PCI address in\nPciDevTracker._claim_instance() so that both code paths agree and the\nguest always mirrors the physical PCI topology of the host.\n\nOnly the list of devices being claimed is sorted. The tracker\u0027s own\npci_devs list, the devices already allocated to other instances and the\ndevice list of an instance that is already running are all left\nuntouched, so an existing instance keeps the BDF layout its guest OS\nalready sees. Unit tests are added for each of those.\n\nCloses-Bug: #2166652\nAssisted-By: Claude Code (claude-opus-5)\nChange-Id: I37d9457f288a2ddb81ad6b63cac51c8702a23e6a\nSigned-off-by: HyungJoon Kim \u003chjoon87.kim@samsung.com\u003e\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/nova/commit/87e31b36805bb94425e1593708b3ceb299b956da"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/nova/commit/87e31b36805bb94425e1593708b3ceb299b956da"}]},"branch":"refs/heads/master"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"OK","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY"},{"label":"Workflow","status":"MAY"},{"label":"Review-Priority","status":"MAY"}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Verified\u003dMAX","label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Code-Review\u003dMAX","label:Code-Review\u003dMIN"],"atom_explanations":{"label:Code-Review\u003dMAX":"","label:Code-Review\u003dMIN":""}}},{"name":"Review-Priority","description":"Review Priority","status":"NOT_APPLICABLE","is_legacy":false,"applicability_expression_result":{"fulfilled":false,"status":"FAIL"},"submittability_expression_result":{"expression":"is:true","fulfilled":true,"status":"NOT_EVALUATED","passing_atoms":[],"failing_atoms":[],"atom_explanations":{}}},{"name":"Workflow","description":"Approved for gate by core reviewer","status":"UNSATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":false,"status":"FAIL","passing_atoms":[],"failing_atoms":["label:Workflow\u003dMAX","label:Workflow\u003dMIN"],"atom_explanations":{"label:Workflow\u003dMAX":"","label:Workflow\u003dMIN":""}}}]}
