)]}'
{"id":"openstack%2Fnova~1005073","triplet_id":"openstack%2Fnova~stable%2F2025.1~I334f80ed76ae869fe241d468c0bf5dd3d0634bbd","project":"openstack/nova","branch":"stable/2025.1","attention_set":{"14228":{"account":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"last_update":"2026-09-10 17:09:42.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-10 15:27:07.000000000","updated":"2026-09-10 17:18:59.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":"41c6616801ea0f566fd3d39e011414820216b545","_number":1005073,"virtual_id_number":1005073,"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-10 17:09:33.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":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"}]},"pending_reviewers":{},"reviewer_updates":[{"updated":"2026-09-10 15:27:07.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-10 16:22:31.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-10 17:09:33.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-10 17:09:42.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":"d1151be1e86dbc6331b935873478beb04c2a7345","tag":"autogenerated:gerrit:newPatchSet","author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"date":"2026-09-10 15:27:07.000000000","message":"Uploaded patch set 1.","accounts_in_message":[],"_revision_number":1},{"id":"886be84f471659ddf964300ba1c19e4551646bc6","author":{"_account_id":14384,"name":"Quobyte CI","email":"openstack-ci-external@quobyte.com","username":"quobyteci","tags":["SERVICE_USER"]},"date":"2026-09-10 16:22:31.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":"c8397a8ac2e62c3e9c4926ac5543e76efa993fbd","tag":"autogenerated:zuul:check","author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"date":"2026-09-10 17:09:33.000000000","message":"Patch Set 1: Verified+1\n\nBuild succeeded (check pipeline).\nhttps://zuul.opendev.org/t/openstack/buildset/c706dfbf2af44175a54371fb446dd461\n\n- grenade-skip-level-always https://zuul.opendev.org/t/openstack/build/4d363fd81083457d90f43415d4ce5148 : FAILURE in 26m 41s (non-voting)\n- tempest-integrated-compute https://zuul.opendev.org/t/openstack/build/d88a60d4cb054e3b970144a9c50dcd46 : SUCCESS in 1h 38m 59s\n- openstacksdk-functional-devstack https://zuul.opendev.org/t/openstack/build/bd9b8d7e2b954441bb6d89ba4d8bb050 : SUCCESS in 34m 59s\n- openstack-tox-cover https://zuul.opendev.org/t/openstack/build/8f57924e68804f9799c7c4c1bf881b26 : SUCCESS in 24m 36s\n- openstack-tox-pep8 https://zuul.opendev.org/t/openstack/build/29cee0e5574d48cb9ec717408b9805ff : SUCCESS in 8m 09s\n- openstack-tox-py39 https://zuul.opendev.org/t/openstack/build/391df83c84bd47f98387f45d775dbb07 : SUCCESS in 15m 29s\n- openstack-tox-py312 https://zuul.opendev.org/t/openstack/build/49c454f728ab40feaa6ec27178cd43ac : SUCCESS in 13m 31s\n- openstack-tox-docs https://zuul.opendev.org/t/openstack/build/bbfc9cb8897e4c038cbca1a51c0948ba : SUCCESS in 6m 56s\n- build-openstack-releasenotes https://zuul.opendev.org/t/openstack/build/f4c205d806eb4762b12b564a7e94fb85 : SUCCESS in 8m 42s\n- ironic-tempest-ipa-wholedisk-bios-agent_ipmitool-tinyipa https://zuul.opendev.org/t/openstack/build/8331e939d29b4da8920c9147605f4982 : SUCCESS in 1h 03m 43s (non-voting)\n- nova-ceph-multistore https://zuul.opendev.org/t/openstack/build/e5b48fe55ce4462b9f391974a324ae8c : SUCCESS in 59m 05s\n- nova-live-migration https://zuul.opendev.org/t/openstack/build/5b5f96ad6e42479d9fdcafbf5117bd3c : SUCCESS in 44m 50s\n- nova-live-migration-ceph https://zuul.opendev.org/t/openstack/build/ba5b474504fd49a0acb71a1f748b6d0c : SUCCESS in 32m 52s\n- nova-multi-cell https://zuul.opendev.org/t/openstack/build/41f0d3e99d624b34a68c6eae098853e1 : SUCCESS in 1h 08m 21s\n- nova-next https://zuul.opendev.org/t/openstack/build/70b8ec47357747e3b1252050c0a4aa76 : SUCCESS in 1h 17m 45s\n- nova-ovs-hybrid-plug https://zuul.opendev.org/t/openstack/build/8c6239f99cf64d58999885168b09175d : SUCCESS in 44m 59s\n- nova-tox-validate-backport https://zuul.opendev.org/t/openstack/build/828b7b93ccf9460ea47dd0d645f02d25 : FAILURE in 7m 16s (non-voting)\n- nova-tox-functional-py39 https://zuul.opendev.org/t/openstack/build/ebec85068c114c58bc3e50f211f7c9ee : SUCCESS in 23m 28s\n- nova-tox-functional-py310 https://zuul.opendev.org/t/openstack/build/04c945e8776b4c26af2122bd109aad1b : SUCCESS in 29m 52s\n- nova-tox-functional-py312 https://zuul.opendev.org/t/openstack/build/51ba4235a2ea49348537d904ab48c6d2 : SUCCESS in 28m 47s\n- nova-grenade-multinode https://zuul.opendev.org/t/openstack/build/968e4180479e4c2ab9db9e0110992329 : SUCCESS in 1h 09m 36s\n- tempest-ipv6-only https://zuul.opendev.org/t/openstack/build/ba0cdd496c444a4f99b9e5d3972b035b : SUCCESS in 54m 05s\n- cyborg-tempest https://zuul.opendev.org/t/openstack/build/77a845349c4746a2bd53ef6dc57ea3d5 : SUCCESS in 15m 38s (non-voting)\n- barbican-tempest-plugin-simple-crypto https://zuul.opendev.org/t/openstack/build/026c575596aa4517b98ae1cb9f31c04e : SUCCESS in 26m 12s (non-voting)","accounts_in_message":[],"_revision_number":1},{"id":"41c6616801ea0f566fd3d39e011414820216b545","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-10 17:18:59.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":"ed468e7193cc7b448446b5a27a81334b991c7eb2","revisions":{"ed468e7193cc7b448446b5a27a81334b991c7eb2":{"kind":"REWORK","_number":1,"created":"2026-09-10 15:27:07.000000000","uploader":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"ref":"refs/changes/73/1005073/1","fetch":{"anonymous http":{"url":"https://review.opendev.org/openstack/nova","ref":"refs/changes/73/1005073/1","commands":{"Checkout":"git fetch https://review.opendev.org/openstack/nova refs/changes/73/1005073/1 \u0026\u0026 git checkout FETCH_HEAD","Cherry Pick":"git fetch https://review.opendev.org/openstack/nova refs/changes/73/1005073/1 \u0026\u0026 git cherry-pick FETCH_HEAD","Format Patch":"git fetch https://review.opendev.org/openstack/nova refs/changes/73/1005073/1 \u0026\u0026 git format-patch -1 --stdout FETCH_HEAD","Pull":"git pull https://review.opendev.org/openstack/nova refs/changes/73/1005073/1"}}},"commit":{"parents":[{"commit":"ce37978276744e92d91251210a1d9c2784eea375","subject":"Merge \"Fix mutating global config in websocket proxy\" into stable/2025.1","web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/nova/commit/ce37978276744e92d91251210a1d9c2784eea375"}]}],"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-10 15:26:42.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/ed468e7193cc7b448446b5a27a81334b991c7eb2"}],"resolve_conflicts_web_links":[{"name":"gitea","tooltip":"Open in GitWeb","url":"https://opendev.org/openstack/nova/commit/ed468e7193cc7b448446b5a27a81334b991c7eb2"}]},"branch":"refs/heads/stable/2025.1"}},"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":""}}}]}
