)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a6f09865443ee0b0d99ae22b3357f3a30be0d332","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"37973c21_e7602e7a","updated":"2026-03-23 17:13:11.000000000","message":"ack, I figured these were both just AI commits without the cleanup (especially based on the commit message), and I know they were [WIP]ed I was just -1ing for visibility as I passed over the set.","commit_id":"3b0a05d7625710fd13857c2f6eb082ca67e92b60"}],"nova/tests/functional/compute/test_startup_performance.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"25c02e0ddb17b3a1fb5d4cde1cecd548e2d853e3","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1b290cfc_effc54cc","updated":"2026-03-23 17:36:18.000000000","message":"by the way one of the ideas i had but didnt try impmeting was adding a\n\n--export or --expose flag tha twould keep the simulator runing but expose the nova api or placmenet api ectra on a http port with auth disabled.\n\n\nbasifcally i was wodneirng if we could alllow you so \"create/resize\" instance or inspect the RPs with osc.\n\nif we were to make thsi a real thing that woudl be nice to enabel testing with diffent schduler config ectra but that was all out of scope of this inital poc.\n\n\nim not actully advocating for merging this simulator in teh nova tree by the way. \nwe coudl do that but it could live elsewhere. this was just a quick way for me to protype it.\n\n\nthe ironic fixture might be useful however to create functional regerssion tests or similar going forward for ironic issues.","commit_id":"3b0a05d7625710fd13857c2f6eb082ca67e92b60"}],"quick-rules.md":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"640e5773725a58b3c66ec593951dc3783b82aaf9","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# OpenStack Python Quick Rules for AI Code Generation"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"\u003e **Quick Reference**: Essential rules for AI tools generating OpenStack-compliant Python code."},{"line_number":4,"context_line":"\u003e **For detailed explanations**: See the [OpenStack Python Comprehensive Style Guide for AI](comprehensive-version)"}],"source_content_type":"text/x-markdown","patch_set":3,"id":"458c8eea_576bc617","line":1,"updated":"2026-03-23 16:39:32.000000000","message":"I assume you didn\u0027t mean for this to be in this commit.","commit_id":"3b0a05d7625710fd13857c2f6eb082ca67e92b60"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"37dde0dd77f99028762c04af12a4e78b2921180e","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# OpenStack Python Quick Rules for AI Code Generation"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"\u003e **Quick Reference**: Essential rules for AI tools generating OpenStack-compliant Python code."},{"line_number":4,"context_line":"\u003e **For detailed explanations**: See the [OpenStack Python Comprehensive Style Guide for AI](comprehensive-version)"}],"source_content_type":"text/x-markdown","patch_set":3,"id":"1ea25ad8_58e46e82","line":1,"in_reply_to":"458c8eea_576bc617","updated":"2026-03-23 17:00:59.000000000","message":"oh ya, \n no i did not this is just my local quick-rules for how ai shoudl wrte commet messsage ectra. i tought i fixed that before i pushed but i guess not","commit_id":"3b0a05d7625710fd13857c2f6eb082ca67e92b60"}],"startup.md":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"640e5773725a58b3c66ec593951dc3783b82aaf9","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Nova-Compute Startup Performance: Ironic (Baremetal) Deep-Dive"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"## Executive Summary"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":3,"id":"5a0a05d7_3955ab15","line":1,"updated":"2026-03-23 16:39:32.000000000","message":"Also assume that this needs to be somewhere other than the root of the project, if we\u0027re going to keep it.","commit_id":"3b0a05d7625710fd13857c2f6eb082ca67e92b60"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"37dde0dd77f99028762c04af12a4e78b2921180e","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Nova-Compute Startup Performance: Ironic (Baremetal) Deep-Dive"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"## Executive Summary"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":3,"id":"adbfeb68_7eab0bf5","line":1,"in_reply_to":"5a0a05d7_3955ab15","updated":"2026-03-23 17:00:59.000000000","message":"ya so for now this was me just keepting the notes\n\nand to provdie context.\n\nif we kept this it would be in the docs somewher ebut i plan to delete this if we procueed with the patch .","commit_id":"3b0a05d7625710fd13857c2f6eb082ca67e92b60"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"25c02e0ddb17b3a1fb5d4cde1cecd548e2d853e3","unresolved":true,"context_lines":[{"line_number":111,"context_line":"| **B1** | Ironic `nodes()` API repeated 3–4× | Nova | O(N) per call × 3–4 calls | \u003c0.1 s (fake); **8–40 s** (real Ironic) |"},{"line_number":112,"context_line":"| **B2** | Serial per-node update loop | Nova | O(N) × I/O per node | **234.8 s** (96.3%) |"},{"line_number":113,"context_line":"| **B3** | Per-provider allocation GETs | Nova | O(N) serial GETs | included in B2 |"},{"line_number":114,"context_line":"| **B4** | O(N) Placement calls before RPC starts | Nova | O(N) | 0.1 s (fake); significant with real Placement |"},{"line_number":115,"context_line":"| **B5** | Hash ring rebuild | Nova | O(peers) | \u003c0.01 s |"},{"line_number":116,"context_line":"| **B6** | `ProviderTree` deepcopy | **Nova** | **O(N²) confirmed** | **49.1 s** (20%) — deepcopy inclusive |"},{"line_number":117,"context_line":"| **B7** | jsonschema request validation | **Placement** | O(N × payload_size) | 28.2 s (12%) — server-side |"}],"source_content_type":"text/x-markdown","patch_set":3,"id":"6fb3e7cc_7fbae529","line":114,"range":{"start_line":114,"start_character":0,"end_line":114,"end_character":2},"updated":"2026-03-23 17:36:18.000000000","message":"im not sure this is actully a real issue by the way\n\n\nwhat we really care about is the over all start time not time to rpc aviablity so movign that eailar or later does not really matteer.","commit_id":"3b0a05d7625710fd13857c2f6eb082ca67e92b60"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"25c02e0ddb17b3a1fb5d4cde1cecd548e2d853e3","unresolved":true,"context_lines":[{"line_number":112,"context_line":"| **B2** | Serial per-node update loop | Nova | O(N) × I/O per node | **234.8 s** (96.3%) |"},{"line_number":113,"context_line":"| **B3** | Per-provider allocation GETs | Nova | O(N) serial GETs | included in B2 |"},{"line_number":114,"context_line":"| **B4** | O(N) Placement calls before RPC starts | Nova | O(N) | 0.1 s (fake); significant with real Placement |"},{"line_number":115,"context_line":"| **B5** | Hash ring rebuild | Nova | O(peers) | \u003c0.01 s |"},{"line_number":116,"context_line":"| **B6** | `ProviderTree` deepcopy | **Nova** | **O(N²) confirmed** | **49.1 s** (20%) — deepcopy inclusive |"},{"line_number":117,"context_line":"| **B7** | jsonschema request validation | **Placement** | O(N × payload_size) | 28.2 s (12%) — server-side |"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":3,"id":"48653f8b_8db3ef63","line":115,"range":{"start_line":115,"start_character":0,"end_line":115,"end_character":58},"updated":"2026-03-23 17:36:18.000000000","message":"so the peer_list which is what uses the hashrigh is deprecate for removal and i dont think tis require at all when using shards so if we proceed with the pre sharding cleanup this itme woudl jsut go away and we might edn up remvoign on eof the calls to refesh the node cace too.","commit_id":"3b0a05d7625710fd13857c2f6eb082ca67e92b60"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"25c02e0ddb17b3a1fb5d4cde1cecd548e2d853e3","unresolved":true,"context_lines":[{"line_number":136,"context_line":"│    ├─ IronicDriver._refresh_hash_ring()                   ← B5"},{"line_number":137,"context_line":"│    ├─ _get_nodes() → _refresh_cache()                     ← B1 (1st nodes() call)"},{"line_number":138,"context_line":"│    ├─ InstanceList.get_by_host()                           ← 1 DB query"},{"line_number":139,"context_line":"│    ├─ _destroy_evacuated_instances() → _refresh_cache()   ← B1 (2nd nodes() call)"},{"line_number":140,"context_line":"│    └─ _error_out_instances_whose_build_was_interrupted()  ← B4"},{"line_number":141,"context_line":"│"},{"line_number":142,"context_line":"└─► ComputeManager.pre_start_hook                           [manager.py:1945]"}],"source_content_type":"text/x-markdown","patch_set":3,"id":"97b0cd42_778dd95e","line":139,"range":{"start_line":139,"start_character":6,"end_line":139,"end_character":58},"updated":"2026-03-23 17:36:18.000000000","message":"so ironic in thory can support evaucate but some of the miration option belive are not relevent to iroic.","commit_id":"3b0a05d7625710fd13857c2f6eb082ca67e92b60"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"25c02e0ddb17b3a1fb5d4cde1cecd548e2d853e3","unresolved":true,"context_lines":[{"line_number":145,"context_line":"          └─ for nodename in nodenames:                     ← B2 (serial loop)"},{"line_number":146,"context_line":"               └─ rt.update_available_resource()"},{"line_number":147,"context_line":"                    ├─ InstanceList.get_by_host_and_node()   ← DB per node"},{"line_number":148,"context_line":"                    ├─ MigrationList.get_in_progress_…()     ← DB per node"},{"line_number":149,"context_line":"                    ├─ _update_to_placement()"},{"line_number":150,"context_line":"                    │    ├─ get_provider_tree_and_ensure_root()  ← B6 (deepcopy)"},{"line_number":151,"context_line":"                    │    ├─ get_allocations_for_provider_tree() ← B3"}],"source_content_type":"text/x-markdown","patch_set":3,"id":"b9d86431_3e854d9b","line":148,"range":{"start_line":148,"start_character":17,"end_line":148,"end_character":74},"updated":"2026-03-23 17:36:18.000000000","message":"i.e. this \ni dont think we need to or shoudl add ironic speific flags for this  \n\nbut we have a lot of migration related check in init_host that we may bee able to just skip vai say a class atibute on the driver (supprot migraiton) or simialr.\n\ni dont know if that woudl give any reasl saving however so i didnt spend much time on that since it was not flag by the profiler as a hotspot.","commit_id":"3b0a05d7625710fd13857c2f6eb082ca67e92b60"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"25c02e0ddb17b3a1fb5d4cde1cecd548e2d853e3","unresolved":true,"context_lines":[{"line_number":221,"context_line":""},{"line_number":222,"context_line":"At N\u003d5000 this would be ~20 minutes."},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"### B7 — jsonschema request validation (Placement-side)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"**Location:** `placement/util.py:extract_json` and `validate_query_params`"},{"line_number":227,"context_line":""}],"source_content_type":"text/x-markdown","patch_set":3,"id":"064c394f_3da352f1","line":224,"range":{"start_line":224,"start_character":0,"end_line":224,"end_character":55},"updated":"2026-03-23 17:36:18.000000000","message":"we cant elimiate this overhad in placmeent but we may be able to mimise it by\neeither ensureing we only send an update once for all the RPs\nor by only submiting an update for each independing RP once\n\nafter all each compute node has its own rp so the update of one does not impact the other\n\nso at start up we shoudl at most have 1 get per ironic node and 1 put \n\nor 1 get for all the node managed by this compute service and 1 put for all of them if we batch things\n\npossibly N if we batch them in groups of N\n\nso we may be able to minimize the time placment spend on validation by optimising the query we are actully making.","commit_id":"3b0a05d7625710fd13857c2f6eb082ca67e92b60"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"25c02e0ddb17b3a1fb5d4cde1cecd548e2d853e3","unresolved":true,"context_lines":[{"line_number":387,"context_line":"# Quick start"},{"line_number":388,"context_line":"tox -e startup-perf -- --nodes 500"},{"line_number":389,"context_line":"tox -e startup-perf -- --topology tools/startup-perf/topologies/ironic-driver-medium.yaml"},{"line_number":390,"context_line":"tox -e startup-perf -- --nodes 50 --profile-mode pyinstrument --profile-output-dir /tmp/profiles"},{"line_number":391,"context_line":"```"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"The simulator outputs bottleneck attribution, projected savings, and per-node"}],"source_content_type":"text/x-markdown","patch_set":3,"id":"58fd676f_b686c877","line":390,"range":{"start_line":390,"start_character":0,"end_line":390,"end_character":96},"updated":"2026-03-23 17:36:18.000000000","message":"this is what i was actully runnign \n```\nuvx tox -e startup-perf -- --topology tools/startup-perf/topologies/ironic-driver-small.yaml --profile-mode pyinstrument --profile-output-dir /tmp/profiles\n```\nmore often with eventlet disabled \n```\nOS_NOVA_DISABLE_EVENTLET_PATCHING\u003d1 uvx tox -e startup-perf -- --topology tools/startup-perf/topologies/ironic-driver-large.yaml --profile-mode pyinstrument --profile-output-dir /tmp/profiles\n```\nsince that is the direction we are moving in anyway","commit_id":"3b0a05d7625710fd13857c2f6eb082ca67e92b60"}]}
