)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8512a38ca3627f3ef5395ba849917fb8c3e86ee2","unresolved":true,"context_lines":[{"line_number":17,"context_line":"This commit sets defaults for status_code_retries to api_max_retries"},{"line_number":18,"context_line":"and status_code_retry_delay to api_retry_interval, so operators no"},{"line_number":19,"context_line":"longer need to set them manually, as was suggested in bug 2019977."},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"This change depends on openstacksdk change 1011585 (bug 2171557)."},{"line_number":22,"context_line":"Without it, status_code_retry_delay is ignored, and retries will use"},{"line_number":23,"context_line":"keystoneauth\u0027s exponential backoff."},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Deprecating api_max_retries and api_retry_interval is left to follow-up"},{"line_number":26,"context_line":"work, as they are still used elsewhere in the ironic driver."},{"line_number":27,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"b4f17b8e_703a6287","line":24,"range":{"start_line":20,"start_character":1,"end_line":24,"end_character":1},"updated":"2026-10-22 12:38:52.000000000","message":"You want to bump the minimum of openstacksdk in `requirements.txt` once we merge this to ensure we pick up the fix. You\u0027ll have to drop that bump if you backport, but at least we\u0027ll be correct here. Note that I\u0027ve just proposed [a release with this fix](https://review.opendev.org/c/openstack/releases/+/1011842) so you should be able to do this now in anticipation.\n\nOn a releated note, are you planning on backporting this? If so, you\u0027ll want to backport the openstacksdk change first, I suspect?","commit_id":"80640f445e4f2005cb3a3c4308164e6a6a8101cd"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e19f117afdbd84fb65c378224a9949288ab39507","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"bd24e785_3afa94d2","updated":"2026-10-22 12:33:37.000000000","message":"Right issue, wrong fix 😉 Let me know if anything I\u0027ve said doesn\u0027t make sense. Hopefully the [prior art](review.opendev.org/c/openstack/nova/+/1002657/4) here helps.","commit_id":"80640f445e4f2005cb3a3c4308164e6a6a8101cd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8044120edb7bcbeeba07629dd58a3b8bbe761e6c","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":1,"id":"11f86452_8a103ba9","updated":"2026-10-21 18:32:24.000000000","message":"Stephen o/ this approach doe snot seam terrible to me although was under the impression the that the sdk was ment to have this retry capablity built in for some status codes nativly.\n\ndoes the sdk have it own dedicated cofnig option for this?\n\ni was kind of hoping we could avoid having to do this piecemeal for every service\nif there was  acommon config section that the sdk reads form.\n\ni know it does supprot defaults.json\n\nhttps://github.com/openstack/openstacksdk/blob/master/openstack/config/defaults.json\nhttps://github.com/openstack/openstacksdk/blob/master/openstack/config/defaults.py\n\nbut i have no idea if that is something we have to enabel as a user fo the sdk.\n\nthat contians\n```\n  \"baremetal_status_code_retries\": 5,\n  \"baremetal_introspection_status_code_retries\": 5,\n```\n\nas an example but im unsure if nova passes a path for where to look at that\n\nhttps://github.com/openstack/openstacksdk/blob/master/openstack/config/loader.py#L230 is where that is loaded form but tha twill lokk in the stie packages directoy by default.\n\nyou could pass OS_CLIENT_CONFIG_FILE to point at your own version\n\nbut all of tha tfeels lses clean then having a proper oslo config section to point to it or nova manually propagaitng our old config options.\n\nanyway you input on the best path forward here woudl be good if you have time to review this.","commit_id":"80640f445e4f2005cb3a3c4308164e6a6a8101cd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8512a38ca3627f3ef5395ba849917fb8c3e86ee2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f359d769_03fc6e4b","updated":"2026-10-22 12:38:52.000000000","message":"We also want","commit_id":"80640f445e4f2005cb3a3c4308164e6a6a8101cd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"68b54e6e933535037c73edb17acb319d0cd71163","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"b77a68ae_3f9c225c","in_reply_to":"f359d769_03fc6e4b","updated":"2026-10-22 12:39:12.000000000","message":"Err, half finished comment. Ignore this.","commit_id":"80640f445e4f2005cb3a3c4308164e6a6a8101cd"}],"nova/conf/ironic.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e19f117afdbd84fb65c378224a9949288ab39507","unresolved":true,"context_lines":[{"line_number":37,"context_line":"* user_domain_id or user_domain_name"},{"line_number":38,"context_line":"\"\"\")"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"ironic_options \u003d ["},{"line_number":41,"context_line":"    cfg.IntOpt("},{"line_number":42,"context_line":"        \u0027api_max_retries\u0027,"},{"line_number":43,"context_line":"        # TODO(raj_singh): Change this default to some sensible number"},{"line_number":44,"context_line":"        default\u003d60,"},{"line_number":45,"context_line":"        min\u003d0,"},{"line_number":46,"context_line":"        help\u003d\"\"\""},{"line_number":47,"context_line":"The number of times to retry when a request conflicts."},{"line_number":48,"context_line":"If set to 0, only try once, no retries."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Related options:"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"* api_retry_interval"},{"line_number":53,"context_line":"\"\"\"),"},{"line_number":54,"context_line":"    cfg.IntOpt("},{"line_number":55,"context_line":"        \u0027api_retry_interval\u0027,"},{"line_number":56,"context_line":"        default\u003d2,"},{"line_number":57,"context_line":"        min\u003d0,"},{"line_number":58,"context_line":"        help\u003d\"\"\""},{"line_number":59,"context_line":"The number of seconds to wait before retrying the request."},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"Related options:"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"* api_max_retries"},{"line_number":64,"context_line":"\"\"\"),"},{"line_number":65,"context_line":"    cfg.IntOpt("},{"line_number":66,"context_line":"        \u0027serial_console_state_timeout\u0027,"},{"line_number":67,"context_line":"        default\u003d10,"}],"source_content_type":"text/x-python","patch_set":1,"id":"5b393516_9ebc8487","line":64,"range":{"start_line":40,"start_character":18,"end_line":64,"end_character":5},"updated":"2026-10-22 12:33:37.000000000","message":"Rather than doing what you\u0027ve done below, we should drop these options from here...\n\n```suggestion\nironic_options \u003d [\n```","commit_id":"80640f445e4f2005cb3a3c4308164e6a6a8101cd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e19f117afdbd84fb65c378224a9949288ab39507","unresolved":true,"context_lines":[{"line_number":114,"context_line":"             \u0027between all services specified here. \u0027"},{"line_number":115,"context_line":"             \u0027If conductor_group is unset, this option is ignored.\u0027),"},{"line_number":116,"context_line":"]"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"# Make openstacksdk obey the same retry options as ironicclient"},{"line_number":119,"context_line":"_ADAPTER_DEFAULTS \u003d {"},{"line_number":120,"context_line":"    \u0027status_code_retries\u0027: \u0027$ironic.api_max_retries\u0027,"},{"line_number":121,"context_line":"    \u0027status_code_retry_delay\u0027: \u0027$ironic.api_retry_interval\u0027,"},{"line_number":122,"context_line":"}"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"def register_opts(conf):"},{"line_number":126,"context_line":"    conf.register_group(ironic_group)"},{"line_number":127,"context_line":"    conf.register_opts(ironic_options, group\u003dironic_group)"},{"line_number":128,"context_line":"    confutils.register_ksa_opts(conf, ironic_group, DEFAULT_SERVICE_TYPE,"},{"line_number":129,"context_line":"                                adapter_defaults\u003d_ADAPTER_DEFAULTS)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":1,"id":"875bd7ae_3d8c4645","line":129,"range":{"start_line":117,"start_character":1,"end_line":129,"end_character":67},"updated":"2026-10-22 12:33:37.000000000","message":"...and register them as deprecated aliases for the ksa opts.\n\n```suggestion\n\n\ndeprecated_ksa_opts \u003d {\n    \u0027status_code_retries\u0027: [\n        cfg.DeprecatedOpt(\u0027api_max_retries\u0027, group\u003dironic_group.name)\n    ],\n    \u0027status_code_retry_delay\u0027: [\n        cfg.DeprecatedOpt(\u0027api_retry_interval\u0027, group\u003dironic_group.name)\n    ],\n}\n\n\ndef register_opts(conf):\n    conf.register_group(ironic_group)\n    conf.register_opts(ironic_options, group\u003dironic_group)\n    confutils.register_ksa_opts(\n        conf, ironic_group, DEFAULT_SERVICE_TYPE,\n        deprecated_opts\u003ddeprecated_ksa_opts)\n```\n\nThis isn\u0027t the only service that\u0027s affected like this. I\u0027m also trying to fix it for cinder and neutron in [change 1002657](https://review.opendev.org/c/openstack/nova/+/1002657/4).","commit_id":"80640f445e4f2005cb3a3c4308164e6a6a8101cd"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e19f117afdbd84fb65c378224a9949288ab39507","unresolved":true,"context_lines":[{"line_number":135,"context_line":"        ks_loading.get_session_conf_options() +"},{"line_number":136,"context_line":"        ks_loading.get_auth_common_conf_options() +"},{"line_number":137,"context_line":"        ks_loading.get_auth_plugin_conf_options(\u0027v3password\u0027) +"},{"line_number":138,"context_line":"        confutils.get_ksa_adapter_opts(DEFAULT_SERVICE_TYPE,"},{"line_number":139,"context_line":"                                       adapter_defaults\u003d_ADAPTER_DEFAULTS))"},{"line_number":140,"context_line":"    }"}],"source_content_type":"text/x-python","patch_set":1,"id":"d6d13b57_d484672d","line":139,"range":{"start_line":138,"start_character":0,"end_line":139,"end_character":75},"updated":"2026-10-22 12:33:37.000000000","message":"```suggestion\n        confutils.get_ksa_adapter_opts(\n            DEFAULT_SERVICE_TYPE, deprecated_opts\u003ddeprecated_ksa_opts))\n```","commit_id":"80640f445e4f2005cb3a3c4308164e6a6a8101cd"}],"nova/conf/utils.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e19f117afdbd84fb65c378224a9949288ab39507","unresolved":true,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"def get_ksa_adapter_opts(default_service_type, deprecated_opts\u003dNone,"},{"line_number":26,"context_line":"                         adapter_defaults\u003dNone):"},{"line_number":27,"context_line":"    \"\"\"Get auth, Session, and Adapter conf options from keystonauth1.loading."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    :param default_service_type: Default for the service_type conf option on"}],"source_content_type":"text/x-python","patch_set":1,"id":"f5c1c012_7b4c787b","line":26,"updated":"2026-10-22 12:33:37.000000000","message":"None of these changes should be necessary, per my comments in the previous file.","commit_id":"80640f445e4f2005cb3a3c4308164e6a6a8101cd"}],"nova/tests/unit/conf/test_ironic.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e19f117afdbd84fb65c378224a9949288ab39507","unresolved":true,"context_lines":[{"line_number":1,"context_line":"# Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":2,"context_line":"# not use this file except in compliance with the License. You may obtain"},{"line_number":3,"context_line":"# a copy of the License at"},{"line_number":4,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":1,"id":"051fbe92_acce5b6b","line":1,"updated":"2026-10-22 12:33:37.000000000","message":"I don\u0027t think we want to add this test here once changed, since we are in-effect testing functionality of ksa rather than nova. We might want to update `test__unprovision_fail_max_retries` in `nova/tests/unit/virt/ironic/test_driver.py` though, since that alleges to test retry logic and probably could/should be extended to test all opts?","commit_id":"80640f445e4f2005cb3a3c4308164e6a6a8101cd"}],"releasenotes/notes/ironic-status-code-retries-e6fc81b8915cae2f.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"e19f117afdbd84fb65c378224a9949288ab39507","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes an issue with the ironic driver, where requests that Ironic rejects"},{"line_number":5,"context_line":"    with HTTP 409 (for example while a node is locked) or 503 were not retried."},{"line_number":6,"context_line":"    ``[ironic]status_code_retries`` and ``[ironic]status_code_retry_delay``"},{"line_number":7,"context_line":"    now default to ``[ironic]api_max_retries`` and"},{"line_number":8,"context_line":"    ``[ironic]api_retry_interval``. See `bug 2169776"},{"line_number":9,"context_line":"    \u003chttps://bugs.launchpad.net/nova/+bug/2169776\u003e`__ for details."}],"source_content_type":"text/x-yaml","patch_set":1,"id":"320b0ce7_1c3a1ff8","line":9,"range":{"start_line":3,"start_character":5,"end_line":9,"end_character":66},"updated":"2026-10-22 12:33:37.000000000","message":"and this needs to be rewritten, naturally.","commit_id":"80640f445e4f2005cb3a3c4308164e6a6a8101cd"}]}
