)]}'
{"id":"openstack%2Fnova~1004899","triplet_id":"openstack%2Fnova~stable%2F2025.2~I334f80ed76ae869fe241d468c0bf5dd3d0634bbd","project":"openstack/nova","branch":"stable/2025.2","attention_set":{"14228":{"account":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"last_update":"2026-09-09 19:36:14.000000000","reason":"Someone else replied on the change"}},"removed_from_attention_set":{},"hashtags":[],"change_id":"I334f80ed76ae869fe241d468c0bf5dd3d0634bbd","subject":"perf(ironic): eliminate O(N²) ProviderTree deepcopy at startup","status":"NEW","created":"2026-09-09 17:03:40.000000000","updated":"2026-09-09 19:45:54.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":"c34c27ba9f8f3d62a2d226766626af1ebd368ca6","_number":1004899,"virtual_id_number":1004899,"owner":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"actions":{},"labels":{"Verified":{"recommended":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"all":[{"tag":"autogenerated:zuul:check","value":1,"date":"2026-09-09 19:36:07.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"},"default_value":0,"optional":true}},"removable_reviewers":[],"reviewers":{"CC":[{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},{"_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"}],"REVIEWER":[{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-09-09 17:03:40.000000000","updated_by":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"reviewer":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"state":"CC"},{"updated":"2026-09-09 17:57:07.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-09 19:36:07.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-09 19:36:14.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":"b485b5fbcdc6454a2a221da6ba90dd9615fe0f06","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"date":"2026-09-09 17:03:40.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"c2a4d41189e2104b407283b61adfd5d75b3bb289","author":{"_account_id":14384,"name":"Quobyte CI","email":"openstack-ci-external@quobyte.com","username":"quobyteci","tags":["SERVICE_USER"]},"date":"2026-09-09 17:57:07.000000000","message":"Patch Set 1:\n\nBuild Successful \n\n* quobyteci:  nova_quobyteci : SUCCESS, logs at: https://oscilogs.quobyte.com/logs/I334f80ed76ae869fe241d468c0bf5dd3d0634bbd .","accounts_in_message":[],"_revision_number":1},{"id":"2aa17e037d79b14947bc94b097b14444a34dc145","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-09 19:36:07.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/ca0b4d474d5140b4a692da953199dfe7\n\n- tempest-integrated-compute https://zuul.opendev.org/t/openstack/build/7e3db360c0ca466e9c3865b1f4cd072c : SUCCESS in 1h 03m 52s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/d8fad34ebf9648e183d39e8877e22733 : SUCCESS in 1h 03m 36s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/81f6a2a3f2844fb7a9d3abf6812b79e4 : SUCCESS in 26m 53s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/5246e0c560914249b4ce2fe53f3cc4c9 : SUCCESS in 6m 36s\n- openstack-tox-py310 https://zuul.opendev.org/t/openstack/build/73943b5644fe492d808188c0432dfc70 : SUCCESS in 15m 33s\n- openstack-tox-py312 https://zuul.opendev.org/t/openstack/build/a3c7af0461e74a5a9cb0c7c6f7178738 : SUCCESS in 13m 46s\n- openstack-tox-py313 https://zuul.opendev.org/t/openstack/build/6c04c60eb9bb474987633df29444a656 : SUCCESS in 19m 42s (non-voting)\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/f4795d2ef98b4e56a230f95db8ee763f : SUCCESS in 14m 18s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/f83a977401f045859f61f1abc89c8df4 : SUCCESS in 10m 11s\n- ironic-tempest-ipa-wholedisk-bios-agent_ipmitool-tinyipa https://zuul.opendev.org/t/openstack/build/be64113f357e4f52a884b2e245756963 : SUCCESS in 1h 17m 30s (non-voting)\n- nova-ceph-multistore https://zuul.opendev.org/t/openstack/build/cd247e415630472995cbba0bea1eb634 : SUCCESS in 1h 25m 54s\n- nova-live-migration https://zuul.opendev.org/t/openstack/build/4e7832f3042e40d6b21706267f0a0aef : SUCCESS in 1h 01m 44s\n- nova-live-migration-ceph https://zuul.opendev.org/t/openstack/build/1cea08c8528a4db1a610db6793c77c63 : SUCCESS in 58m 30s\n- nova-multi-cell https://zuul.opendev.org/t/openstack/build/7277a99e7d0841068ecf2f0bc156466e : SUCCESS in 2h 04m 57s\n- nova-next https://zuul.opendev.org/t/openstack/build/5f2a39b9a9f44dca9db6d650158366a1 : SUCCESS in 2h 23m 38s\n- nova-ovs-hybrid-plug https://zuul.opendev.org/t/openstack/build/a79df78d52ae4acc8d81ac7190809ccd : SUCCESS in 31m 17s\n- nova-tox-validate-backport https://zuul.opendev.org/t/openstack/build/06bd7b4803ad4cc2ac6f3c40f5de8e08 : FAILURE in 5m 04s (non-voting)\n- nova-tox-functional-py310 https://zuul.opendev.org/t/openstack/build/9e3eee6b778448d592bbee501fce690e : SUCCESS in 26m 12s\n- nova-tox-functional-py312 https://zuul.opendev.org/t/openstack/build/44a6f1367ee74e50888b3a5c6df724c7 : SUCCESS in 28m 38s\n- nova-grenade-multinode https://zuul.opendev.org/t/openstack/build/8536ee1d69674f7bb43a98392aa74422 : SUCCESS in 54m 11s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/2507eedcff214e89aaf79a189baf9e66 : SUCCESS in 30m 52s\n- cyborg-tempest https://zuul.opendev.org/t/openstack/build/be3be7ef0619440da7cd9b053b833585 : SUCCESS in 36m 05s (non-voting)\n- barbican-tempest-plugin-simple-crypto https://zuul.opendev.org/t/openstack/build/2432cc63c45b49a1965391cd24110ab7 : SUCCESS in 15m 54s (non-voting)\n- nova-tox-py312-threading https://zuul.opendev.org/t/openstack/build/a3ddb2b9cc554160bdb8653e15846d7e : SUCCESS in 15m 48s","accounts_in_message":[],"_revision_number":1},{"id":"c34c27ba9f8f3d62a2d226766626af1ebd368ca6","tag":"autogenerated:jenkins-gerrit-trigger","author":{"_account_id":34420,"name":"openstack lightbits","display_name":"Lightbits CI","email":"openstack@lightbitslabs.com","username":"openstack_lightbits"},"date":"2026-09-09 19:45:54.000000000","message":"Patch Set 1:\n\nBuild succeeded. log path: ${LOG_PATH}\nLeave a comment with","accounts_in_message":[],"_revision_number":1}],"current_revision_number":1,"current_revision":"eec242758bc7fb6b972468d5fd3216c11b46de60","revisions":{"eec242758bc7fb6b972468d5fd3216c11b46de60":{"kind":"REWORK","_number":1,"created":"2026-09-09 17:03:40.000000000","uploader":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"ref":"refs/changes/99/1004899/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/nova","ref":"refs/changes/99/1004899/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/nova refs/changes/99/1004899/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/nova refs/changes/99/1004899/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/nova refs/changes/99/1004899/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/nova refs/changes/99/1004899/1"}}},"commit":{"parents":[{"commit":"7a1a8a2325172a2f2a07b4447243b46e6959ed70","subject":"Make QEMU_IMG_LIMITS process limits configurable","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/nova/commit/7a1a8a2325172a2f2a07b4447243b46e6959ed70"}]}],"author":{"name":"Sean Mooney","email":"work@seanmooney.info","date":"2026-03-15 23:52:10.000000000","tz":0},"committer":{"name":"Clif Houck","email":"me@clifhouck.com","date":"2026-09-09 16:52:47.000000000","tz":-300},"subject":"perf(ironic): eliminate O(N²) ProviderTree deepcopy at startup","message":"perf(ironic): eliminate O(N²) ProviderTree deepcopy at startup\n\nget_provider_tree_and_ensure_root() previously returned\ncopy.deepcopy(self._provider_tree) — a full copy of every provider\nin the shared tree.  With N Ironic nodes each _update_to_placement()\ncall copies ~N providers, giving O(N²) total work: ~49 s at N\u003d1000\n(20% of startup).\n\nFix: add ProviderTree.subtree(name_or_uuid) which deep-copies only\nthe O(K) providers rooted at the requested node and returns a ProviderSubTree,\nthen wire it up via new subtree_only\u003dTrue parameter on\nget_provider_tree_and_ensure_root().\n\nupdate_from_provider_tree() now looks for ProviderSubTree\nso that the old/new UUID diff is limited to the requested sub-tree,\npreventing providers from other nodes being incorrectly treated as\nremovals.\n\nThe conductor caller (image-trait validation during rebuild) continues\nto get the full tree as before; only the per-node resource-tracker\npath uses the new subtree copy.\n\nUnit tests added for all subtree() behaviours: correct extraction,\ndeepcopy isolation, child inclusion, sibling exclusion, and error\ncases for non-root / missing providers.\n\nCloses-Bug: 2162924\nGenerated-by: Cursor sonnet 4.6\nChange-Id: I334f80ed76ae869fe241d468c0bf5dd3d0634bbd\nSigned-off-by: Sean Mooney \u003cwork@seanmooney.info\u003e\nSigned-off-by: Clif Houck \u003cme@clifhouck.com\u003e\n(cherry picked from commit 318ca9ee790e5c39d9c4b342f2ae85d05c280990)\n(cherry picked from commit 60229246a872d849c2fe6a47e666324a23622b65)\n","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/nova/commit/eec242758bc7fb6b972468d5fd3216c11b46de60"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/nova/commit/eec242758bc7fb6b972468d5fd3216c11b46de60"}]},"branch":"refs/heads/stable/2025.2"}},"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":""}}}]}
