)]}'
{"id":"openstack%2Fnova~960246","triplet_id":"openstack%2Fnova~stable%2F2024.2~Ie9d311ea9f59ff49593003e3773b690dd36fdeb2","project":"openstack/nova","branch":"stable/2024.2","topic":"bug/2115905","attention_set":{},"removed_from_attention_set":{"9708":{"account":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"last_update":"2026-04-29 01:25:13.000000000","reason":"Change was submitted"}},"hashtags":[],"change_id":"Ie9d311ea9f59ff49593003e3773b690dd36fdeb2","subject":"[pci]Keep used dev in Placement regardless of dev_spec","status":"MERGED","created":"2025-09-09 09:14:00.000000000","updated":"2026-04-29 01:28:26.000000000","submitted":"2026-04-29 01:25:13.000000000","submitter":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"total_comment_count":4,"unresolved_comment_count":0,"has_review_started":true,"submission_id":"960246-bug/2115905","meta_rev_id":"3a27dabb8242fe2b9d15cc8b2328866df8d9e344","_number":960246,"virtual_id_number":960246,"owner":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"actions":{},"labels":{"Verified":{"approved":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:gate","value":2,"date":"2026-04-29 01:25:12.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},{"value":0,"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"}],"values":{"-2":"Fails","-1":"Doesn\u0027t seem to work"," 0":"No score","+1":"Works for me","+2":"Verified"},"description":"","default_value":0,"optional":true},"Code-Review":{"approved":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"all":[{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":2,"date":"2025-10-13 12:06:42.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},{"value":2,"date":"2026-04-28 23:10:08.000000000","permitted_voting_range":{"min":2,"max":2},"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"}],"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":{"approved":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"all":[{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},{"value":1,"date":"2026-04-28 23:10:08.000000000","permitted_voting_range":{"min":1,"max":1},"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"}],"values":{"-1":"Work in progress"," 0":"Ready for reviews","+1":"Approved"},"description":"","default_value":0,"optional":true},"Review-Priority":{"all":[{"value":0,"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},{"value":0,"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},{"value":0,"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"}],"values":{" 0":"Default Priority","+1":"Contributor Review Promise","+2":"Core Review Promise"},"description":"","default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"CC":[{"_account_id":34420,"name":"openstack lightbits","display_name":"Lightbits CI","email":"openstack@lightbitslabs.com","username":"openstack_lightbits"}],"REVIEWER":[{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2025-09-09 10:35:41.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":"2025-09-09 11:08:40.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":"2025-09-09 14:17:02.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"},{"updated":"2025-10-13 12:06:42.000000000","updated_by":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"reviewer":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"state":"REVIEWER"},{"updated":"2026-04-28 23:10:08.000000000","updated_by":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"reviewer":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"state":"REVIEWER"}],"messages":[{"id":"d7c4bfb22f31d73302d3effb3a35124575c7c791","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2025-09-09 09:14:00.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"76f863f74db79fca15064fbe69b6106318d9b6f0","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2025-09-09 10:35:41.000000000","message":"Patch Set 1:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/82f01aaaa1e741fdab24a5ac19358a35\n\n- openstack-tox-py39-arm64 https://zuul.opendev.org/t/openstack/build/ab447739144a4ae2860548ec39d1f82e : SUCCESS in 41m 33s (non-voting)\n- openstack-tox-py311-arm64 https://zuul.opendev.org/t/openstack/build/9398372aa9ff4910a9fe338712167b5c : SUCCESS in 30m 08s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"a104ac4af837adc14d7f35656afdf18fde37948b","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2025-09-09 11:08:40.000000000","message":"Patch Set 1: Verified-1\n\nBuild failed (check pipeline).  For information on how to proceed, see\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#automated-testing\nand https://docs.openstack.org/project-team-guide/testing.html#how-to-handle-test-failures\n\nhttps://zuul.opendev.org/t/openstack/buildset/9d6060dfbb234d57a43f0ec061d55330\n\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/4db3d91873ef4ab081dd3ce0de4e298e : SUCCESS in 52m 08s\n- tempest-integrated-compute https://zuul.opendev.org/t/openstack/build/3fbcb1e721884de481e564c59561c9cc : SUCCESS in 1h 46m 12s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/d1f6643ac499422c8133bb865735a022 : FAILURE in 36m 51s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/1d709eb0ab924b14bc4dc63dad934498 : SUCCESS in 17m 28s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/236ae300c6234926983442baa6e0f102 : SUCCESS in 7m 34s\n- openstack-tox-py39 https://zuul.opendev.org/t/openstack/build/68b77b4f725e42eead1834953177b697 : SUCCESS in 13m 22s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/f53493ca974948d89d2628f8319d010a : SUCCESS in 12m 43s\n- openstack-tox-py312 https://zuul.opendev.org/t/openstack/build/badde1901c0141c28fbca09a78bdaaf2 : SUCCESS in 7m 53s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/9e8c690c56f44e5a8cc57070e25654ea : SUCCESS in 9m 35s\n- ironic-tempest-ipa-wholedisk-bios-agent_ipmitool-tinyipa https://zuul.opendev.org/t/openstack/build/e77ae592ed88494ab44c1faa675a347e : SUCCESS in 29m 16s (non-voting)\n- nova-ceph-multistore https://zuul.opendev.org/t/openstack/build/db932628b53a478f8e1778309447edc5 : SUCCESS in 59m 15s\n- nova-tox-validate-backport https://zuul.opendev.org/t/openstack/build/ab947ef4d324434895fc0a5f34046bde : FAILURE in 4m 48s (non-voting)\n- nova-tox-functional-py39 https://zuul.opendev.org/t/openstack/build/343e08f8d4734cdf9b332ccdc413ea8d : SUCCESS in 25m 48s\n- nova-tox-functional-py310 https://zuul.opendev.org/t/openstack/build/7f56c59abaa64fbeb59a9dd7af06c7a0 : SUCCESS in 28m 33s\n- nova-tox-functional-py312 https://zuul.opendev.org/t/openstack/build/0720f94dd3e84a7bb2a871baa76896d3 : SUCCESS in 32m 37s\n- tempest-integrated-compute-enforce-scope-new-defaults https://zuul.opendev.org/t/openstack/build/68842ad3aff74c5da6c5a837182a18ab : SUCCESS in 1h 06m 32s\n- tempest-integrated-compute-rbac-old-defaults https://zuul.opendev.org/t/openstack/build/b60fe135ced34afb884f38ee03c0bf53 : SUCCESS in 1h 48m 51s\n- nova-grenade-multinode https://zuul.opendev.org/t/openstack/build/fec7d23397774b4e92b8f7024c12df71 : SUCCESS in 57m 06s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/e459df77479d48bab6dae0d35d5e2639 : SUCCESS in 42m 48s\n- cyborg-tempest https://zuul.opendev.org/t/openstack/build/9cead398ec254747869dbb6ed9420def : SUCCESS in 27m 05s (non-voting)\n- barbican-tempest-plugin-simple-crypto https://zuul.opendev.org/t/openstack/build/09f3503520d0481497963169da7300e0 : SUCCESS in 29m 13s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"7e025329a85ccbb4895e7788502215592e26522b","author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"date":"2025-09-09 12:24:54.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"1cbfcc9cf367a1a670553bbfd3144079dabafc86","tag":"autogenerated:zuul:check-arm64","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2025-09-09 13:07:04.000000000","message":"Patch Set 1:\n\nBuild succeeded (ARM64 pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/20b5475695ce49559b7be03b790c3171\n\n- openstack-tox-py39-arm64 https://zuul.opendev.org/t/openstack/build/35ecc8330337486a88a84a7a5cce0438 : SUCCESS in 16m 13s (non-voting)\n- openstack-tox-py311-arm64 https://zuul.opendev.org/t/openstack/build/8a639f64f9a64886a656215d65d2e08d : SUCCESS in 39m 06s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"cb323ba5a19080d7204646b3046340286edf691f","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2025-09-09 14:11:39.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/6a21017701d0441a967d3ea954eb4cc2\n\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/af685923d2da4d1f86b7a106157297ea : SUCCESS in 36m 48s\n- tempest-integrated-compute https://zuul.opendev.org/t/openstack/build/9042ddf0d15f413e97a3b60e297d03f9 : SUCCESS in 1h 29m 44s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/01bef3892d1747f6a0e616b289e0d8ef : SUCCESS in 1h 03m 43s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/e57c8ce283dd4a2b88a011a257219df2 : SUCCESS in 14m 10s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/fc8d9df08af24d108b85bc2d30b433f9 : SUCCESS in 7m 28s\n- openstack-tox-py39 https://zuul.opendev.org/t/openstack/build/6375831ab1e248fe8a3623c700608798 : SUCCESS in 15m 09s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/a0886f8744504633a9025856dbc159ed : SUCCESS in 11m 19s\n- openstack-tox-py312 https://zuul.opendev.org/t/openstack/build/c0372d9e921048f89480cbb49bec7761 : SUCCESS in 11m 49s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/ad94d56c692f4bebb45877147c31f2e1 : SUCCESS in 10m 43s\n- ironic-tempest-ipa-wholedisk-bios-agent_ipmitool-tinyipa https://zuul.opendev.org/t/openstack/build/b74c8014acc343e588a497e03cbc3217 : SUCCESS in 53m 26s (non-voting)\n- nova-ceph-multistore https://zuul.opendev.org/t/openstack/build/98297d0406f6423eb3bdd6af17c5bd0f : SUCCESS in 1h 02m 44s\n- nova-tox-validate-backport https://zuul.opendev.org/t/openstack/build/469f9c2370f147939ba57bbb17698790 : FAILURE in 5m 13s (non-voting)\n- nova-tox-functional-py39 https://zuul.opendev.org/t/openstack/build/23521a41ed7e47338c48ee08e4f25e7d : SUCCESS in 19m 54s\n- nova-tox-functional-py310 https://zuul.opendev.org/t/openstack/build/5336999e32904142ae28d6820364ed18 : SUCCESS in 28m 41s\n- nova-tox-functional-py312 https://zuul.opendev.org/t/openstack/build/3dcee31df2f14be8a2da4634336bde3e : SUCCESS in 33m 18s\n- tempest-integrated-compute-enforce-scope-new-defaults https://zuul.opendev.org/t/openstack/build/bf423a444fe04a85bde18d3330b77c93 : SUCCESS in 1h 16m 31s\n- tempest-integrated-compute-rbac-old-defaults https://zuul.opendev.org/t/openstack/build/933ae3741f864c4eb492b82ae0b0eb01 : SUCCESS in 1h 13m 42s\n- nova-grenade-multinode https://zuul.opendev.org/t/openstack/build/bdeaf321b54d4da3bd7536a0d31e3b30 : SUCCESS in 49m 36s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/7758d21b50ca40339ca86797310ec83f : SUCCESS in 55m 51s\n- cyborg-tempest https://zuul.opendev.org/t/openstack/build/eac5ca4e934143acaac8c5386c380337 : SUCCESS in 22m 51s (non-voting)\n- barbican-tempest-plugin-simple-crypto https://zuul.opendev.org/t/openstack/build/142569f4a009494ba40a5f2f096828b2 : SUCCESS in 28m 26s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"7c323a273eaab83d1da325e240001070358135d7","tag":"autogenerated:jenkins-gerrit-trigger","author":{"_account_id":34420,"name":"openstack lightbits","display_name":"Lightbits CI","email":"openstack@lightbitslabs.com","username":"openstack_lightbits"},"date":"2025-09-09 14:17:02.000000000","message":"Patch Set 1:\n\nBuild succeeded. log path: ${LOG_PATH}\nLeave a comment with \u0027run-Lightbits CI\u0027 to trigger a recheck. \nFor more information about CI, please see https://wiki.openstack.org/wiki/ThirdPartySystems/LightbitsLabs_CI","accounts_in_message":[],"_revision_number":1},{"id":"1be92e96122e85e2693b6d0d718468e52e1d771b","author":{"_account_id":17685,"name":"Elod Illes","email":"elod.illes@est.tech","username":"elod.illes"},"date":"2025-10-13 12:06:42.000000000","message":"Patch Set 1: Code-Review+2\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"c7813ee81279fd41405bee9a5ce0346d29598e2a","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2026-04-28 23:10:08.000000000","message":"Patch Set 1: Code-Review+2 Workflow+1\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"d19de3c20fbd34cf1d3d9a14604cc07e6fe95890","author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"date":"2026-04-28 23:12:10.000000000","message":"Patch Set 1:\n\n(1 comment)","accounts_in_message":[],"_revision_number":1},{"id":"e9053e3eb1236269869108f4406bb8f54eefaadf","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-28 23:14:17.000000000","message":"Patch Set 1: -Verified\n\nStarting gate jobs.","accounts_in_message":[],"_revision_number":1},{"id":"4241ea0487ce945bfdea7d03c1eeecef012b598a","tag":"autogenerated:zuul:gate","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-29 01:25:12.000000000","message":"Patch Set 1: Verified+2\n\nBuild succeeded (gate pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/e043b80517b44929aaef5a9a318ee85f\n\n- tempest-integrated-compute https://zuul.opendev.org/t/openstack/build/0aa440ca1b174ee79d0d1c6185aed6aa : SUCCESS in 1h 48m 22s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/1b704205c10e461ba0dc0c5e5dbdaba3 : SUCCESS in 56m 13s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/facb319ec4cb43fbbb3ca80940a5410c : SUCCESS in 6m 22s\n- openstack-tox-py39 https://zuul.opendev.org/t/openstack/build/5b93975340f9429a824566d15dad4f7c : SUCCESS in 13m 31s\n- openstack-tox-py311 https://zuul.opendev.org/t/openstack/build/4576940351dd4f53a63328a52e451564 : SUCCESS in 11m 40s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/d1c5ae2d978145fda261dc8b54841bd9 : SUCCESS in 6m 19s\n- nova-tox-functional-py39 https://zuul.opendev.org/t/openstack/build/820816b3b3ee4ffeaf176845c9727720 : SUCCESS in 24m 09s\n- nova-tox-functional-py310 https://zuul.opendev.org/t/openstack/build/7f0790ba20204e1299cad6389b3bb2c7 : SUCCESS in 27m 30s\n- nova-tox-functional-py312 https://zuul.opendev.org/t/openstack/build/f3da136380b34715b4e3922ecd1f3bb8 : SUCCESS in 22m 45s\n- nova-tox-validate-backport https://zuul.opendev.org/t/openstack/build/1d3f4b8a6f6a47ecb9581acad40f92cc : SUCCESS in 4m 56s\n- nova-ceph-multistore https://zuul.opendev.org/t/openstack/build/704a5e80f28d4921b732d6a601d13b0c : SUCCESS in 1h 53m 50s\n- tempest-integrated-compute-enforce-scope-new-defaults https://zuul.opendev.org/t/openstack/build/94803289eb8949f08ec459aa0b2a1326 : SUCCESS in 1h 03m 44s\n- tempest-integrated-compute-rbac-old-defaults https://zuul.opendev.org/t/openstack/build/4701b7304d20493db1bf2d4027d7d55f : SUCCESS in 1h 38m 04s\n- nova-grenade-multinode https://zuul.opendev.org/t/openstack/build/dcfb1a21796942c583267a29bdfb0db4 : SUCCESS in 1h 19m 59s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/e9caa6dd7fc54dad9ab4c42960690666 : SUCCESS in 28m 56s","accounts_in_message":[],"_revision_number":1},{"id":"e2494a51dc3f987a47b173c7032e6c826d8e147c","tag":"autogenerated:gerrit:merged","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-29 01:25:13.000000000","message":"Change has been successfully merged","accounts_in_message":[],"_revision_number":1},{"id":"3a27dabb8242fe2b9d15cc8b2328866df8d9e344","tag":"autogenerated:zuul:promote","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-04-29 01:28:26.000000000","message":"Patch Set 1:\n\nBuild succeeded (promote pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/f8735eb77aa640fab25cfe6e8fa21390\n\n- promote-openstack-tox-docs https://zuul.opendev.org/t/openstack/build/ec5ac4c732c5461494098b6e67d0091b : SUCCESS in 42s","accounts_in_message":[],"_revision_number":1}],"current_revision_number":1,"current_revision":"14f7df7914b36761f745788259ecaea82fb4b85f","revisions":{"14f7df7914b36761f745788259ecaea82fb4b85f":{"kind":"REWORK","_number":1,"created":"2025-09-09 09:14:00.000000000","uploader":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"ref":"refs/changes/46/960246/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/nova","ref":"refs/changes/46/960246/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/nova refs/changes/46/960246/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/nova refs/changes/46/960246/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/nova refs/changes/46/960246/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/nova refs/changes/46/960246/1"}}},"commit":{"parents":[{"commit":"69ab5f4bb7d23a02dac679c35ea3933c1bd74a2f","subject":"[PCI tracker]Remove non configured devs when freed","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/nova/commit/69ab5f4bb7d23a02dac679c35ea3933c1bd74a2f"}]}],"author":{"name":"Balazs Gibizer","email":"gibi@redhat.com","date":"2025-07-04 15:06:29.000000000","tz":120},"committer":{"name":"Balazs Gibizer","email":"gibi@redhat.com","date":"2025-09-09 09:08:23.000000000","tz":120},"subject":"[pci]Keep used dev in Placement regardless of dev_spec","message":"[pci]Keep used dev in Placement regardless of dev_spec\n\nThis changes the PCI Placement translator edge case handling logic to\nresolve a bug preventing VM deletion.\n\nIf a device is allocated but removed from the dev_spec then we need to\nkeep the device in Placement otherwise the Placement update will be\nrejected as we are trying to delete an RP that has allocations. This\nprevent the deletion of a VM that is using this removed device.\n\nThe alternative would be to not allow the nova-compute service to\nstart if it detects this situation. However this situation can\nhappen in at least two very different cases:\n1. The admin removed a dev_spec. In this case adding the dev_spec back,\n   removing the VM, then removing the dev_spec is the right course of\n   action and nova-compute failing to start would be OK to enforce this.\n\n2. A device disappeared as the HW is died. In this case not allowing the\n   nova-compute to start up would prevent the admin to migrate the\n   other VMs away from the host before doing a HW replacement.\n\nNote that this is fairly complex change due to the fact that based on\npurely the PciDevice object we cannot differentiate between the two\ncases:\n\n1. A PciDevice object is being removed as the related device spec is\n   removed from the configuration or the device is disappeared from\n   the hypervisor.\n\n2. A PciDevice object was held back for a while as the device spec is\n   removed (or the device disappeared from the hypervisor) while the\n   device was allocated to a VM. And now that VM is undergoing deletion.\n\nIn both case the PCI in Placement logic sees a PciDevice object in\ndev.status.REMOVED and dev.instance_uuid \u003d None. However the two cases\nrequire different handling.\n\n1. The related inventory can be removed from Placement\n\n2. The related inventory cannot be removed from Placement as it is still\n   being allocated to the VM that is undergoing deletion.\n\nThe second case is due to the sequence of events during a VM deletion\nbeing:\n* We destroy the VM on the hypervisor\n* We update the PCI tracker to free the device. As the device was held back\n  the tracker not just frees the device but removes it as well as it is\n  not configured any more in the dev_spec so it should not go to\n  AVAILABLE state.\n* When the PCI tracker is updated it calls the PCI in Placement logic\n  to update Placement inventories as well. At this point the VM deletion\n  still in progress and the VM\u0027s allocation hasn\u0027t been deleted in\n  Placement, so the Placement inventory cannot be removed as it is still\n  allocated.\n* After the resource tracker update is finished the compute manager\n  deletes the VM\u0027s allocation in Placement.\n\nSo in this edge case we temporarily keep the Placement inventory and\nonly remove that in a subsequent periodic run where we are sure the\nVM\u0027s allocation is gone. This means there is a time window when\nthe Placement inventory shows an extra resource even though that\nresource has already been removed from the PCI tracker. During this\nwindow the scheduler might select a host based on this ghost inventory\nand the compute resource tracker will reject the boot request forcing\na normal re-schedule.\n\nCloses-Bug: #2115905\nChange-Id: Ie9d311ea9f59ff49593003e3773b690dd36fdeb2\nSigned-off-by: Balazs Gibizer \u003cgibi@redhat.com\u003e\n(cherry picked from commit 4495f1f019ccaa0067121d8f5b367140aa9cb7ae)\n(cherry picked from commit 78be1679312768383b684fa70ca4d2f5c4e35fa9)\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/nova/commit/14f7df7914b36761f745788259ecaea82fb4b85f"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/nova/commit/14f7df7914b36761f745788259ecaea82fb4b85f"}]},"branch":"refs/heads/stable/2024.2"}},"requirements":[],"submit_records":[{"rule_name":"gerrit~DefaultSubmitRule","status":"CLOSED","labels":[{"label":"Verified","status":"MAY","applied_by":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}},{"label":"Code-Review","status":"MAY","applied_by":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"}},{"label":"Workflow","status":"MAY","applied_by":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"}},{"label":"Review-Priority","status":"MAY"}]}],"submit_requirements":[{"name":"Verified","description":"Verified in gate by CI","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Verified\u003dMAX AND -label:Verified\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Verified\u003dMAX"],"failing_atoms":["label:Verified\u003dMIN"],"atom_explanations":{"label:Verified\u003dMAX":"","label:Verified\u003dMIN":""}}},{"name":"Code-Review","description":"Code reviewed by core reviewer","status":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Code-Review\u003dMAX AND -label:Code-Review\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Code-Review\u003dMAX"],"failing_atoms":["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":"SATISFIED","is_legacy":false,"submittability_expression_result":{"expression":"label:Workflow\u003dMAX AND -label:Workflow\u003dMIN","fulfilled":true,"status":"PASS","passing_atoms":["label:Workflow\u003dMAX"],"failing_atoms":["label:Workflow\u003dMIN"],"atom_explanations":{"label:Workflow\u003dMAX":"","label:Workflow\u003dMIN":""}}}]}
