)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7e26a3da17d4e7cdadf950336287d55a3d138be9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"b9e1a2ee_08a216db","updated":"2025-12-19 14:35:53.000000000","message":"recheck multi-cell guest kernel panic\n```\n[   11.201668] random: crng init done\ncurrently loaded modules: 8021q 8139cp 8390 9pnet 9pnet_virtio ahci cec dca drm drm_kms_helper e1000 e1000e failover fb_sys_fops garp hid hid_generic i2c_algo_bit igb igbvf ip6_udp_tunnel ip_tables isofs libahci libcrc32c llc mii mrp ne2k_pci net_failover nls_ascii nls_iso8859_1 nls_utf8 pcnet32 qemu_fw_cfg rc_core sctp stp syscopyarea sysfillrect sysimgblt udp_tunnel usbhid virtio_blk virtio_dma_buf virtio_gpu virtio_input virtio_net virtio_rng virtio_scsi virtiofs x_tables \ninfo: initramfs loading root from /dev/vda1\n/sbin/init: can\u0027t load library \u0027libtirpc.so.3\u0027\n[   13.594699] Kernel panic - not syncing: Attempted to kill init! exitcode\u003d0x00001000\n[   13.595745] CPU: 0 PID: 1 Comm: init Not tainted 5.15.0-117-generic #127-Ubuntu\n[   13.596379] Hardware name: OpenStack Foundation OpenStack Nova, BIOS 1.16.3-debian-1.16.3-2 04/01/2014\n[   13.597334] Call Trace:\n[   13.598803]  \u003cTASK\u003e\n[   13.599245]  show_stack+0x52/0x5c\n[   13.600094]  dump_stack_lvl+0x4a/0x63\n[   13.600412]  dump_stack+0x10/0x16\n[   13.600691]  panic+0x15c/0x33b\n[   13.600956]  do_exit.cold+0x15/0xa0\n[   13.601229]  __x64_sys_exit+0x1b/0x20\n[   13.601553]  x64_sys_call+0x1f30/0x1fa0\n[   13.601955]  do_syscall_64+0x56/0xb0\n[   13.602266]  ? exit_to_user_mode_prepare+0x37/0xb0\n[   13.602622]  ? syscall_exit_to_user_mode+0x2c/0x50\n[   13.602932]  ? x64_sys_call+0x47c/0x1fa0\n[   13.603221]  ? do_syscall_64+0x63/0xb0\n[   13.603544]  ? new_sync_write+0x114/0x1a0\n[   13.603857]  ? vfs_write+0x1d5/0x270\n[   13.604133]  ? ksys_write+0x67/0xf0\n[   13.604412]  ? exit_to_user_mode_prepare+0x37/0xb0\n[   13.604765]  ? syscall_exit_to_user_mode+0x2c/0x50\n[   13.605139]  ? x64_sys_call+0x47c/0x1fa0\n[   13.605444]  ? do_syscall_64+0x63/0xb0\n[   13.611571]  ? finish_task_switch.isra.0+0x7e/0x280\n[   13.615513]  ? __schedule+0x256/0x590\n[   13.619211]  ? schedule+0x69/0x110\n[   13.622862]  ? exit_to_user_mode_loop+0x7e/0x160\n[   13.626650]  ? exit_to_user_mode_prepare+0x99/0xb0\n[   13.630160]  ? irqentry_exit_to_user_mode+0xe/0x20\n[   13.633636]  ? irqentry_exit+0x1d/0x30\n[   13.637098]  ? exc_page_fault+0x89/0x170\n[   13.640466]  entry_SYSCALL_64_after_hwframe+0x6c/0xd6\n[   13.644348] RIP: 0033:0x7f4e3a5a255e\n[   13.648779] Code: 05 d7 2a 00 00 4c 89 f9 bf 02 00 00 00 48 8d 35 fb 0d 00 00 48 8b 10 31 c0 e8 50 d2 ff ff bf 10 00 00 00 b8 3c 00 00 00 0f 05 \u003c48\u003e 8d 15 f3 2a 00 00 f7 d8 89 02 48 83 ec 20 49 8b 8c 24 b8 00 00\n[   13.656783] RSP: 002b:00007ffeb255d8b0 EFLAGS: 00000207 ORIG_RAX: 000000000000003c\n[   13.661037] RAX: ffffffffffffffda RBX: 00007ffeb255eb60 RCX: 00007f4e3a5a255e\n[   13.664800] RDX: 0000000000000002 RSI: 0000000000001000 RDI: 0000000000000010\n[   13.671862] RBP: 00007ffeb255eb40 R08: 00007f4e3a59b000 R09: 00007f4e3a59b01a\n[   13.676119] R10: 0000000000000001 R11: 0000000000000207 R12: 00007f4e3a59c040\n[   13.680161] R13: 00000000004bae50 R14: 0000000000000000 R15: 0000000000403d66\n[   13.684071]  \u003c/TASK\u003e\n[   13.689121] Kernel Offset: 0x25e00000 from 0xffffffff81000000 (relocation range: 0xffffffff80000000-0xffffffffbfffffff)\n[   13.695290] ---[ end Kernel panic - not syncing: Attempted to kill init! exitcode\u003d0x00001000 ]---\n```","commit_id":"b228a3a4eba8b01e2b9a7621b39ea454868ecd5b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e946dca5258bdcf9fbcc58b783d1021ca4073fa8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"e2e98d75_acb10b47","updated":"2025-12-18 13:13:35.000000000","message":"recheck pep8\n```\n    fatal: unable to access \u0027https://opendev.org/openstack/hacking/\u0027: gnutls_handshake() failed: The TLS connection was non-properly terminated.\n```","commit_id":"b228a3a4eba8b01e2b9a7621b39ea454868ecd5b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3bb864023d982946c60e04b6b0d1f45683c2494e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"2558d176_13feb133","updated":"2026-01-14 14:32:48.000000000","message":"+2 but we don\u0027t really need to have two reno files. If you need to rebase this change, please just have one reno file for both points.","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"e4c5157924d4cd3cd7baeccd30b4a707dfea92c3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"259c374f_7727c6d3","updated":"2026-01-14 19:35:30.000000000","message":"change lgtm, but I think we can keep the behavior unchanged for eventlet mode for CONF.max_concurrent_live_migrations\u003d0 but because unlimited (1000) parallel live migration is not something feasible in real so I am fine if you want to change it  but in that case, we should call \u00270 means unlimited\u0027  as \u0027removed\u0027 not \u0027deprecated\u0027","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ecccde7494a6970960b08d04445a5708064e3c53","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"bf754bff_157dc3eb","updated":"2026-01-15 15:41:20.000000000","message":"thanks for the modifications","commit_id":"a5e75d15af3ed599c5c4065e4c6838c44d3e5f01"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a1ab0155af8f74708e66c64a776cf94dc39550df","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"7fcae2b5_bb9fe2d9","updated":"2026-01-15 16:23:27.000000000","message":"thanks for updates, lgtm\n\nits seems unit test failure are related to this change, we need to adjust test with concurrency mode:\n\ntest_max_concurrent_live_semaphore_unlimited\n\nTraceback (most recent call last):\n  File \"/home/zuul/src/opendev.org/openstack/nova/nova/tests/unit/compute/test_compute_mgr.py\", line 11758, in test_max_concurrent_live_semaphore_unlimited\n    self.assertEqual(5, mgr._live_migration_executor._max_workers)\n    ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/zuul/src/opendev.org/openstack/nova/.tox/py313/lib/python3.13/site-packages/testtools/testcase.py\", line 419, in assertEqual\n    self.assertThat(observed, matcher, message)\n    ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n  File \"/home/zuul/src/opendev.org/openstack/nova/.tox/py313/lib/python3.13/site-packages/testtools/testcase.py\", line 509, in assertThat\n    raise mismatch_error\ntesttools.matchers._impl.MismatchError: 5 !\u003d 1000","commit_id":"a5e75d15af3ed599c5c4065e4c6838c44d3e5f01"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"c0e519d76a8409737fdd357ce293d10bba6f435f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"a6602c99_a6eb0316","updated":"2026-01-15 16:09:26.000000000","message":"this revieion looks fien to me also but ill leave +w to gmaan","commit_id":"a5e75d15af3ed599c5c4065e4c6838c44d3e5f01"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"95193ad6ae562b1cc982eeb8787dfafbf1fc4c00","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":15,"id":"5a52af41_fe9aca9c","in_reply_to":"7fcae2b5_bb9fe2d9","updated":"2026-01-15 16:32:55.000000000","message":"Also, I am wondering why this test passed on PS14, there also max_workers were changed from 1000 -\u003e 5.","commit_id":"a5e75d15af3ed599c5c4065e4c6838c44d3e5f01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"04bf339fe280944ef7325d9a5229c2545e66c366","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"b13b1205_da78013a","updated":"2026-01-16 11:40:04.000000000","message":"recheck ceph install issue\n```\n2026-01-16 09:08:35.759579 | controller | \t***************\n2026-01-16 09:08:35.759601 | controller | \tCephadm hit an issue during cluster installation. Current cluster files will be deleted automatically.\n2026-01-16 09:08:35.759623 | controller | \tTo disable this behaviour you can pass the --no-cleanup-on-failure flag. In case of any previous\n2026-01-16 09:08:35.759645 | controller | \tbroken installation, users must use the following command to completely delete the broken cluster:\n2026-01-16 09:08:35.759666 | controller |\n2026-01-16 09:08:35.759688 | controller | \t\u003e cephadm rm-cluster --force --zap-osds --fsid \u003cfsid\u003e\n2026-01-16 09:08:35.759710 | controller |\n2026-01-16 09:08:35.759731 | controller | \tfor more information please refer to https://docs.ceph.com/en/latest/cephadm/operations/#purging-a-cluster\n2026-01-16 09:08:35.759753 | controller | \t***************\n2026-01-16 09:08:35.759774 | controller |\n2026-01-16 09:08:35.759795 | controller |\n2026-01-16 09:08:35.759817 | controller | Deleting cluster with fsid: 2ca5cb0f-eeae-4c2d-9949-efbee8d2ec06\n2026-01-16 09:08:38.667123 | controller | Traceback (most recent call last):\n2026-01-16 09:08:38.667279 | controller |   File \"\u003cfrozen runpy\u003e\", line 198, in _run_module_as_main\n2026-01-16 09:08:38.667405 | controller |   File \"\u003cfrozen runpy\u003e\", line 88, in _run_code\n2026-01-16 09:08:38.667531 | controller |   File \"/usr/bin/cephadm/__main__.py\", line 5288, in \u003cmodule\u003e\n2026-01-16 09:08:38.667806 | controller |   File \"/usr/bin/cephadm/__main__.py\", line 5276, in main\n2026-01-16 09:08:38.668055 | controller |   File \"/usr/bin/cephadm/__main__.py\", line 2524, in _rollback\n2026-01-16 09:08:38.668275 | controller |   File \"/usr/bin/cephadm/__main__.py\", line 434, in _default_image\n2026-01-16 09:08:38.668491 | controller |   File \"/usr/bin/cephadm/__main__.py\", line 2773, in command_bootstrap\n2026-01-16 09:08:38.668705 | controller |   File \"/usr/bin/cephadm/__main__.py\", line 2277, in enable_cephadm_mgr_module\n2026-01-16 09:08:38.668919 | controller |   File \"/usr/bin/cephadm/__main__.py\", line 2709, in cli\n2026-01-16 09:08:38.669133 | controller |   File \"/usr/bin/cephadm/cephadmlib/container_types.py\", line 435, in run\n2026-01-16 09:08:38.669373 | controller |   File \"/usr/bin/cephadm/cephadmlib/call_wrappers.py\", line 307, in call_throws\n2026-01-16 09:08:38.669670 | controller | RuntimeError: Failed command: /usr/bin/podman run --rm --ipc\u003dhost --stop-signal\u003dSIGTERM --net\u003dhost --entrypoint /usr/bin/ceph --init -e CONTAINER_IMAGE\u003dquay.io/ceph/ceph:v20 -e NODE_NAME\u003dnp1e762c3e1c7a4 -v /var/log/ceph/2ca5cb0f-eeae-4c2d-9949-efbee8d2ec06:/var/log/ceph:z -v /tmp/ceph-tmpidv8zbw7:/etc/ceph/ceph.client.admin.keyring:z -v /tmp/ceph-tmpa_i67wne:/etc/ceph/ceph.conf:z quay.io/ceph/ceph:v20 orch set backend cephadm: Error ENOTSUP: Warning: due to ceph-mgr restart, some PG states may not be up to date\n2026-01-16 09:08:38.669695 | controller | Module \u0027orchestrator\u0027 is not enabled/loaded (required by command \u0027orch set backend\u0027): use `ceph mgr module enable orchestrator` to enable it\n2026-01-16 09:08:38.669806 | controller |\n2026-01-16 09:08:38.713603 | controller | + /opt/stack/devstack-plugin-ceph/devstack/lib/cephadm:start_ceph:1 :   exit_trap\n```","commit_id":"3c23390cc8e9690a995b07c3ecec18a2ea381f59"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"b92d55a5471f0dcfb4fcbf662d3c72277761af7e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"404ce9b2_75eee855","updated":"2026-01-16 18:46:10.000000000","message":"thanks, lgtm","commit_id":"3c23390cc8e9690a995b07c3ecec18a2ea381f59"}],"doc/source/admin/concurrency.rst":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cbf5869cfc73fdaf70ab2e794bc758f805a8f62d","unresolved":true,"context_lines":[{"line_number":89,"context_line":"  service memory consumption in native threading mode. It is almost always"},{"line_number":90,"context_line":"  a bad idea to use change this config option from its default value, 1. If"},{"line_number":91,"context_line":"  more performant live migration is needed then enable"},{"line_number":92,"context_line":"  :oslo.config:option:`live_migration_parallel_connections` instead."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Seeing the usage of the pools"},{"line_number":95,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":12,"id":"a113822f_e8ae8f3f","line":92,"updated":"2025-12-11 10:34:21.000000000","message":"This is the cause of [the docs failure](https://zuul.opendev.org/t/openstack/build/93f416bc5b11441baad58e2fb65cb28e). Does this exist in `[DEFAULT]` and if so, are we registering it correctly?","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2267d0c4ea5c90b70fa460fadc6154490a078451","unresolved":false,"context_lines":[{"line_number":89,"context_line":"  service memory consumption in native threading mode. It is almost always"},{"line_number":90,"context_line":"  a bad idea to use change this config option from its default value, 1. If"},{"line_number":91,"context_line":"  more performant live migration is needed then enable"},{"line_number":92,"context_line":"  :oslo.config:option:`live_migration_parallel_connections` instead."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Seeing the usage of the pools"},{"line_number":95,"context_line":"~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"}],"source_content_type":"text/x-rst","patch_set":12,"id":"53c2df9d_aa0a0764","line":92,"in_reply_to":"a113822f_e8ae8f3f","updated":"2025-12-17 14:36:19.000000000","message":"thanks, it is defined in [libvirt]. Fixed.","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3bb864023d982946c60e04b6b0d1f45683c2494e","unresolved":false,"context_lines":[{"line_number":43,"context_line":"As native threads are more expensive resources than greenthreads Nova provides"},{"line_number":44,"context_line":"a set of configuration options to allow fine tuning the deployment based on"},{"line_number":45,"context_line":"load and resource constraints. The default values are selected to support a"},{"line_number":46,"context_line":"basic, small deployment without consuming substantially more memory resources,"},{"line_number":47,"context_line":"than the legacy Eventlet mode. Increasing the size of the below thread pools"},{"line_number":48,"context_line":"means that the given service will consume more memory but will also allow more"},{"line_number":49,"context_line":"tasks to be executed concurrently."}],"source_content_type":"text/x-rst","patch_set":14,"id":"cf9287be_2f254af2","line":46,"updated":"2026-01-14 14:32:48.000000000","message":"a bit unnecessary in this patch, just a cosmetic change, but meh.","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3bb864023d982946c60e04b6b0d1f45683c2494e","unresolved":true,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"* :oslo.config:option:`sync_power_state_pool_size`: Used by the"},{"line_number":79,"context_line":"  nova-compute service to sync the power state of each instance on the host"},{"line_number":80,"context_line":"  between the hypervisor and the DB. Since nova 33.0.0 the default value of"},{"line_number":81,"context_line":"  this option is changed from 1000 to 5 to have a sane default in native"},{"line_number":82,"context_line":"  threading mode. Increasing this value in native threading mode increases"},{"line_number":83,"context_line":"  the nova-compute memory consumption on a host that has many instances."}],"source_content_type":"text/x-rst","patch_set":14,"id":"b130b0d0_d1f761cb","line":80,"range":{"start_line":80,"start_character":43,"end_line":80,"end_character":55},"updated":"2026-01-14 14:32:48.000000000","message":"nit: ``nova 33.0.0 (Gazpacho)``","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8397083555296a35583590929c9db1d3fd19c83e","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"* :oslo.config:option:`sync_power_state_pool_size`: Used by the"},{"line_number":79,"context_line":"  nova-compute service to sync the power state of each instance on the host"},{"line_number":80,"context_line":"  between the hypervisor and the DB. Since nova 33.0.0 the default value of"},{"line_number":81,"context_line":"  this option is changed from 1000 to 5 to have a sane default in native"},{"line_number":82,"context_line":"  threading mode. Increasing this value in native threading mode increases"},{"line_number":83,"context_line":"  the nova-compute memory consumption on a host that has many instances."}],"source_content_type":"text/x-rst","patch_set":14,"id":"ed25d629_f1accf1c","line":80,"range":{"start_line":80,"start_character":43,"end_line":80,"end_character":55},"in_reply_to":"b130b0d0_d1f761cb","updated":"2026-01-15 13:42:26.000000000","message":"Done","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"}],"nova/compute/manager.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cbf5869cfc73fdaf70ab2e794bc758f805a8f62d","unresolved":true,"context_lines":[{"line_number":669,"context_line":"        self.instance_events \u003d InstanceEvents()"},{"line_number":670,"context_line":"        self._sync_power_executor \u003d nova.utils.create_executor("},{"line_number":671,"context_line":"            max_workers\u003dCONF.sync_power_state_pool_size)"},{"line_number":672,"context_line":"        self._syncs_in_progress \u003d {}"},{"line_number":673,"context_line":"        self._syncs_in_progress_lock \u003d threading.Lock()"},{"line_number":674,"context_line":"        self.send_instance_updates \u003d ("},{"line_number":675,"context_line":"            CONF.filter_scheduler.track_instance_changes)"}],"source_content_type":"text/x-python","patch_set":12,"id":"cad38e3e_a61afeb9","line":672,"updated":"2025-12-11 10:34:21.000000000","message":"nit: Not you but there\u0027s no reason for this to be a dict. A set would be fine (we don\u0027t use the value, which is always `True` when a UUID is present)\n\n\n\n```suggestion\n        self._syncs_in_progress: set[str] \u003d set()\n```","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2267d0c4ea5c90b70fa460fadc6154490a078451","unresolved":false,"context_lines":[{"line_number":669,"context_line":"        self.instance_events \u003d InstanceEvents()"},{"line_number":670,"context_line":"        self._sync_power_executor \u003d nova.utils.create_executor("},{"line_number":671,"context_line":"            max_workers\u003dCONF.sync_power_state_pool_size)"},{"line_number":672,"context_line":"        self._syncs_in_progress \u003d {}"},{"line_number":673,"context_line":"        self._syncs_in_progress_lock \u003d threading.Lock()"},{"line_number":674,"context_line":"        self.send_instance_updates \u003d ("},{"line_number":675,"context_line":"            CONF.filter_scheduler.track_instance_changes)"}],"source_content_type":"text/x-python","patch_set":12,"id":"5c6bb985_d9772a62","line":672,"in_reply_to":"cad38e3e_a61afeb9","updated":"2025-12-17 14:36:19.000000000","message":"This is departing from the original goal of the series to remove the eventlet dependency from the code. While this would be a valid refactoring I don\u0027t really want to mix this in.\n\n-- later --\nAs I just agreed to do the context manager refactor this moves anyhow so I do the type change during that move","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cbf5869cfc73fdaf70ab2e794bc758f805a8f62d","unresolved":true,"context_lines":[{"line_number":686,"context_line":"        if CONF.max_concurrent_live_migrations \u003e 0:"},{"line_number":687,"context_line":"            self._live_migration_executor \u003d nova.utils.create_executor("},{"line_number":688,"context_line":"                max_workers\u003dCONF.max_concurrent_live_migrations)"},{"line_number":689,"context_line":"        else:"},{"line_number":690,"context_line":"            # CONF.max_concurrent_live_migrations is 0 (unlimited) is"},{"line_number":691,"context_line":"            # deprecated. But still supported so we need to use a sane default"},{"line_number":692,"context_line":"            # value for native threads."},{"line_number":693,"context_line":"            self._live_migration_executor \u003d nova.utils.create_executor("},{"line_number":694,"context_line":"                max_workers\u003d5)"}],"source_content_type":"text/x-python","patch_set":12,"id":"083716c6_e4ba3d45","line":691,"range":{"start_line":689,"start_character":13,"end_line":691,"end_character":78},"updated":"2025-12-11 10:34:21.000000000","message":"```suggestion\n        else:\n            # setting CONF.max_concurrent_live_migrations to 0 (unlimited) is\n            # deprecated but still supported, so we need to use a sane default\n```","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2267d0c4ea5c90b70fa460fadc6154490a078451","unresolved":false,"context_lines":[{"line_number":686,"context_line":"        if CONF.max_concurrent_live_migrations \u003e 0:"},{"line_number":687,"context_line":"            self._live_migration_executor \u003d nova.utils.create_executor("},{"line_number":688,"context_line":"                max_workers\u003dCONF.max_concurrent_live_migrations)"},{"line_number":689,"context_line":"        else:"},{"line_number":690,"context_line":"            # CONF.max_concurrent_live_migrations is 0 (unlimited) is"},{"line_number":691,"context_line":"            # deprecated. But still supported so we need to use a sane default"},{"line_number":692,"context_line":"            # value for native threads."},{"line_number":693,"context_line":"            self._live_migration_executor \u003d nova.utils.create_executor("},{"line_number":694,"context_line":"                max_workers\u003d5)"}],"source_content_type":"text/x-python","patch_set":12,"id":"9b4e8f46_101fabd4","line":691,"range":{"start_line":689,"start_character":13,"end_line":691,"end_character":78},"in_reply_to":"083716c6_e4ba3d45","updated":"2025-12-17 14:36:19.000000000","message":"Done","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cbf5869cfc73fdaf70ab2e794bc758f805a8f62d","unresolved":true,"context_lines":[{"line_number":11018,"context_line":"                LOG.exception(\"Periodic sync_power_state task had an \""},{"line_number":11019,"context_line":"                              \"error while processing an instance.\","},{"line_number":11020,"context_line":"                              instance\u003ddb_instance)"},{"line_number":11021,"context_line":"            with self._syncs_in_progress_lock:"},{"line_number":11022,"context_line":"                self._syncs_in_progress.pop(db_instance.uuid)"},{"line_number":11023,"context_line":""},{"line_number":11024,"context_line":"        for db_instance in db_instances:"}],"source_content_type":"text/x-python","patch_set":12,"id":"97a253fe_737fd520","line":11021,"updated":"2025-12-11 10:34:21.000000000","message":"nit: Rather than doing this, could we hide `_syncs_in_progress` behind a context manager?\n\n```\nfrom collections.abc import Iterator\n\n...\n\nclass ComputeManager(manager.Manager):\n\n    ...\n\n    @contextlib.contextmanager\n    def syncs_in_progress(self) -\u003e Iterator[set[str]]:\n        with self._syncs_in_progress_lock:\n            yield self._syncs_in_progress\n```\n\n\nthis would then become:\n\n```\n    with self.syncs_in_progress as syncs:\n        syncs.remove(db_instance.uuid)\n```\n\nMuch of a muchness but I think this should be slightly safer/more obvious?","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2267d0c4ea5c90b70fa460fadc6154490a078451","unresolved":false,"context_lines":[{"line_number":11018,"context_line":"                LOG.exception(\"Periodic sync_power_state task had an \""},{"line_number":11019,"context_line":"                              \"error while processing an instance.\","},{"line_number":11020,"context_line":"                              instance\u003ddb_instance)"},{"line_number":11021,"context_line":"            with self._syncs_in_progress_lock:"},{"line_number":11022,"context_line":"                self._syncs_in_progress.pop(db_instance.uuid)"},{"line_number":11023,"context_line":""},{"line_number":11024,"context_line":"        for db_instance in db_instances:"}],"source_content_type":"text/x-python","patch_set":12,"id":"1be1c524_ffd4216e","line":11021,"in_reply_to":"97a253fe_737fd520","updated":"2025-12-17 14:36:19.000000000","message":"I can do that. The value of this construct is that it connects the lock with the data structure it protects.","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cbf5869cfc73fdaf70ab2e794bc758f805a8f62d","unresolved":true,"context_lines":[{"line_number":11030,"context_line":"                    LOG.debug(\u0027Sync already in progress for %s\u0027, uuid)"},{"line_number":11031,"context_line":"                else:"},{"line_number":11032,"context_line":"                    LOG.debug(\u0027Triggering sync for uuid %s\u0027, uuid)"},{"line_number":11033,"context_line":"                    self._syncs_in_progress[uuid] \u003d True"},{"line_number":11034,"context_line":"                    nova.utils.spawn_on("},{"line_number":11035,"context_line":"                        self._sync_power_executor, _sync, db_instance)"},{"line_number":11036,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"0a4adbd8_9a200a82","line":11033,"updated":"2025-12-11 10:34:21.000000000","message":"```suggestion\n                    self._syncs_in_progress.add(uuid)\n```","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2267d0c4ea5c90b70fa460fadc6154490a078451","unresolved":false,"context_lines":[{"line_number":11030,"context_line":"                    LOG.debug(\u0027Sync already in progress for %s\u0027, uuid)"},{"line_number":11031,"context_line":"                else:"},{"line_number":11032,"context_line":"                    LOG.debug(\u0027Triggering sync for uuid %s\u0027, uuid)"},{"line_number":11033,"context_line":"                    self._syncs_in_progress[uuid] \u003d True"},{"line_number":11034,"context_line":"                    nova.utils.spawn_on("},{"line_number":11035,"context_line":"                        self._sync_power_executor, _sync, db_instance)"},{"line_number":11036,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"27743674_4233ba3c","line":11033,"in_reply_to":"0a4adbd8_9a200a82","updated":"2025-12-17 14:36:19.000000000","message":"Done","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"e4c5157924d4cd3cd7baeccd30b4a707dfea92c3","unresolved":true,"context_lines":[{"line_number":687,"context_line":"                max_workers\u003dCONF.max_concurrent_live_migrations)"},{"line_number":688,"context_line":"        else:"},{"line_number":689,"context_line":"            # setting CONF.max_concurrent_live_migrations to 0 (unlimited) is"},{"line_number":690,"context_line":"            # deprecated but still supported, so we need to use a sane default"},{"line_number":691,"context_line":"            # value for native threads."},{"line_number":692,"context_line":"            self._live_migration_executor \u003d nova.utils.create_executor("},{"line_number":693,"context_line":"                max_workers\u003d5)"}],"source_content_type":"text/x-python","patch_set":14,"id":"e1b7c915_0856dc18","line":690,"range":{"start_line":690,"start_character":25,"end_line":690,"end_character":44},"updated":"2026-01-14 19:35:30.000000000","message":"so with change in max_workers\u003d5 for GreenThreadPoolExecutor, this is change in behaviour for eventlet mode (means unlimited is not supported now). I agree for the deprecation of \u0027unlimited paralell live migration\u0027 but let\u0027s not change the behavior for eventlet mode during deprecation phase and we can remove it after once cycle or when we drop eventlet itself. \n\nIn *new* threading mode, this looks good to say that we are not supporting unlimited parallel live migration.\n\nTo accomodate both, we can create the executers directly here instead of generic utils function:\n\n        if CONF.max_concurrent_live_migrations \u003e 0:\n            self._live_migration_executor \u003d nova.utils.create_executor(\n                max_workers\u003dCONF.max_concurrent_live_migrations)\n        else:\n            # Threading mode does not support the unlimited parallel live \n            # migration (CONF.max_concurrent_live_migrations is 0) so we need to \n            # use a sane default value for native threads.\n            if concurrency_mode_threading():\n                LOG.warning(\"Nova compute in threading mode does not support \"\n                            \"the unlimited parallel live migration \"\n                            \"so CONF.max_concurrent_live_migrations configured \"\n                            \"with value \u003c\u003d0 is not valid value\")\n                executor \u003d futurist.ThreadPoolExecutor( max_workers\u003d5)\n            else:\n                # setting CONF.max_concurrent_live_migrations to 0 (unlimited) is\n                # deprecated\n                executor \u003d futurist.GreenThreadPoolExecutor()","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8397083555296a35583590929c9db1d3fd19c83e","unresolved":false,"context_lines":[{"line_number":687,"context_line":"                max_workers\u003dCONF.max_concurrent_live_migrations)"},{"line_number":688,"context_line":"        else:"},{"line_number":689,"context_line":"            # setting CONF.max_concurrent_live_migrations to 0 (unlimited) is"},{"line_number":690,"context_line":"            # deprecated but still supported, so we need to use a sane default"},{"line_number":691,"context_line":"            # value for native threads."},{"line_number":692,"context_line":"            self._live_migration_executor \u003d nova.utils.create_executor("},{"line_number":693,"context_line":"                max_workers\u003d5)"}],"source_content_type":"text/x-python","patch_set":14,"id":"4dd6227d_23352e64","line":690,"range":{"start_line":690,"start_character":25,"end_line":690,"end_character":44},"in_reply_to":"ddb85be0_75c75ff5","updated":"2026-01-15 13:42:26.000000000","message":"OK. I went with Gmaan\u0027s suggestion and restored the 1000 greenthread behavior for the eventlet mode, while switched to 5 native threads in threading mode.","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"b026c0fb44c106fac8e45e74c2e481a1bfce310d","unresolved":true,"context_lines":[{"line_number":687,"context_line":"                max_workers\u003dCONF.max_concurrent_live_migrations)"},{"line_number":688,"context_line":"        else:"},{"line_number":689,"context_line":"            # setting CONF.max_concurrent_live_migrations to 0 (unlimited) is"},{"line_number":690,"context_line":"            # deprecated but still supported, so we need to use a sane default"},{"line_number":691,"context_line":"            # value for native threads."},{"line_number":692,"context_line":"            self._live_migration_executor \u003d nova.utils.create_executor("},{"line_number":693,"context_line":"                max_workers\u003d5)"}],"source_content_type":"text/x-python","patch_set":14,"id":"ddb85be0_75c75ff5","line":690,"range":{"start_line":690,"start_character":25,"end_line":690,"end_character":44},"in_reply_to":"e1b7c915_0856dc18","updated":"2026-01-14 20:40:38.000000000","message":"even, adding a deprecation warning for evenlet mode can be good:\n\n        else:\n            # setting CONF.max_concurrent_live_migrations to 0 (unlimited) is\n            # deprecated\n            LOG.warning(\"Nova compute deprecated the support of unlimited \"\n                        \"parallel live migration so \"\n                        \"CONF.max_concurrent_live_migrations configured with \"\n                        \"value 0 is deprecated and will not be supported in \"\n                        \"future release\")\n            executor \u003d futurist.GreenThreadPoolExecutor()","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"e4c5157924d4cd3cd7baeccd30b4a707dfea92c3","unresolved":true,"context_lines":[{"line_number":11053,"context_line":"                else:"},{"line_number":11054,"context_line":"                    LOG.debug(\u0027Triggering sync for uuid %s\u0027, uuid)"},{"line_number":11055,"context_line":"                    syncs.add(uuid)"},{"line_number":11056,"context_line":"                    nova.utils.spawn_on("},{"line_number":11057,"context_line":"                        self._sync_power_executor, _sync, db_instance)"},{"line_number":11058,"context_line":""},{"line_number":11059,"context_line":"    def _query_driver_power_state_and_sync(self, context, db_instance):"},{"line_number":11060,"context_line":"        if db_instance.task_state is not None:"}],"source_content_type":"text/x-python","patch_set":14,"id":"86b197f9_b7d80e9f","line":11057,"range":{"start_line":11056,"start_character":20,"end_line":11057,"end_character":70},"updated":"2026-01-14 19:35:30.000000000","message":"this is already synchronized in _sync method (Line 11033), and now it is under two lock which is no harm but in case you want to avoid double locking, we only need the _syncs_in_progress_lock for updating this _syncs_in_progress only.","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a1ab0155af8f74708e66c64a776cf94dc39550df","unresolved":false,"context_lines":[{"line_number":11053,"context_line":"                else:"},{"line_number":11054,"context_line":"                    LOG.debug(\u0027Triggering sync for uuid %s\u0027, uuid)"},{"line_number":11055,"context_line":"                    syncs.add(uuid)"},{"line_number":11056,"context_line":"                    nova.utils.spawn_on("},{"line_number":11057,"context_line":"                        self._sync_power_executor, _sync, db_instance)"},{"line_number":11058,"context_line":""},{"line_number":11059,"context_line":"    def _query_driver_power_state_and_sync(self, context, db_instance):"},{"line_number":11060,"context_line":"        if db_instance.task_state is not None:"}],"source_content_type":"text/x-python","patch_set":14,"id":"a2116e42_307e24f5","line":11057,"range":{"start_line":11056,"start_character":20,"end_line":11057,"end_character":70},"in_reply_to":"2b16c44d_979f38ee","updated":"2026-01-15 16:23:27.000000000","message":"right, I get your point. spawn_on and _sync both will be using sepaarate lock. looks good same way, agree with code readability.","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8397083555296a35583590929c9db1d3fd19c83e","unresolved":true,"context_lines":[{"line_number":11053,"context_line":"                else:"},{"line_number":11054,"context_line":"                    LOG.debug(\u0027Triggering sync for uuid %s\u0027, uuid)"},{"line_number":11055,"context_line":"                    syncs.add(uuid)"},{"line_number":11056,"context_line":"                    nova.utils.spawn_on("},{"line_number":11057,"context_line":"                        self._sync_power_executor, _sync, db_instance)"},{"line_number":11058,"context_line":""},{"line_number":11059,"context_line":"    def _query_driver_power_state_and_sync(self, context, db_instance):"},{"line_number":11060,"context_line":"        if db_instance.task_state is not None:"}],"source_content_type":"text/x-python","patch_set":14,"id":"2b16c44d_979f38ee","line":11057,"range":{"start_line":11056,"start_character":20,"end_line":11057,"end_character":70},"in_reply_to":"86b197f9_b7d80e9f","updated":"2026-01-15 13:42:26.000000000","message":"You are correct that the spawn_on call does not need to be under the lock technically. However to remove it under the lock I need to create a pretty hard to read code as it need a `continue` that bumps the loop that is 3 nesting levels up. So I rather not do this:\n\n```\n        for db_instance in db_instances:\n            # process syncs asynchronously - don\u0027t want instance locking to\n            # block entire periodic task thread\n            uuid \u003d db_instance.uuid\n            with self.syncs_in_progress() as syncs:\n                if uuid in syncs:\n                    LOG.debug(\u0027Sync already in progress for %s\u0027, uuid)\n                    continue\n                else:\n                    LOG.debug(\u0027Triggering sync for uuid %s\u0027, uuid)\n                    syncs.add(uuid)\n\n            nova.utils.spawn_on(\n                self._sync_power_executor, _sync, db_instance)\n```\n\nBtw, there is no real double locking. This lock is only held while the task is put into the queue of the executor, spawn_on returns immediately after that. The second lock within _sync will only held by the thread that picks up the task from the executor\u0027s queue. So no single thread will hold both the syncs_in_progress_lock and the db_instance.uuid lock at the same time.","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ecccde7494a6970960b08d04445a5708064e3c53","unresolved":false,"context_lines":[{"line_number":702,"context_line":"                # In eventlet mode we need to keep backward compatibility and"},{"line_number":703,"context_line":"                # 1000 greenthreads to emulate unlimited."},{"line_number":704,"context_line":"                self._live_migration_executor \u003d nova.utils.create_executor("},{"line_number":705,"context_line":"                    max_workers\u003d1000)"},{"line_number":706,"context_line":""},{"line_number":707,"context_line":"        # This is a dict, keyed by instance uuid, to a two-item tuple of"},{"line_number":708,"context_line":"        # migration object and Future for the queued live migration."}],"source_content_type":"text/x-python","patch_set":15,"id":"fb4b9cde_f89e72f8","line":705,"updated":"2026-01-15 15:41:20.000000000","message":"++ good idea gmaan","commit_id":"a5e75d15af3ed599c5c4065e4c6838c44d3e5f01"}],"nova/conf/compute.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3052834f9cba8acdac60ecd65bc3caa4805b4b70","unresolved":true,"context_lines":[{"line_number":324,"context_line":"resource_tracker_opts \u003d ["},{"line_number":325,"context_line":"    cfg.StrOpt(\u0027vcpu_pin_set\u0027,"},{"line_number":326,"context_line":"        deprecated_for_removal\u003dTrue,"},{"line_number":327,"context_line":"        deprecated_since\u003d\u002720.0.0\u0027,"},{"line_number":328,"context_line":"        deprecated_reason\u003d\"\"\""},{"line_number":329,"context_line":"This option has been superseded by the ``[compute] cpu_dedicated_set`` and"},{"line_number":330,"context_line":"``[compute] cpu_shared_set`` options, which allow things like the co-existence"}],"source_content_type":"text/x-python","patch_set":5,"id":"85c62a67_589df4a8","side":"PARENT","line":327,"updated":"2025-11-12 14:29:53.000000000","message":"this is some very strange unintentional damage","commit_id":"e015a43c3c827efbede5563a4fac5583126404ca"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6e4554e91a853202da1ad0740e166b3d8c35afa","unresolved":false,"context_lines":[{"line_number":324,"context_line":"resource_tracker_opts \u003d ["},{"line_number":325,"context_line":"    cfg.StrOpt(\u0027vcpu_pin_set\u0027,"},{"line_number":326,"context_line":"        deprecated_for_removal\u003dTrue,"},{"line_number":327,"context_line":"        deprecated_since\u003d\u002720.0.0\u0027,"},{"line_number":328,"context_line":"        deprecated_reason\u003d\"\"\""},{"line_number":329,"context_line":"This option has been superseded by the ``[compute] cpu_dedicated_set`` and"},{"line_number":330,"context_line":"``[compute] cpu_shared_set`` options, which allow things like the co-existence"}],"source_content_type":"text/x-python","patch_set":5,"id":"939fb6d6_3fde5a41","side":"PARENT","line":327,"in_reply_to":"85c62a67_589df4a8","updated":"2025-11-13 14:49:11.000000000","message":"Done","commit_id":"e015a43c3c827efbede5563a4fac5583126404ca"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cbf5869cfc73fdaf70ab2e794bc758f805a8f62d","unresolved":true,"context_lines":[{"line_number":694,"context_line":""},{"line_number":695,"context_line":"Possible values:"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"* 0 : Deprecated since 33.0.0. This value was treated as unlimited but the"},{"line_number":698,"context_line":"  actual implementation used maximum 1000 greenthread before 33.0.0. After"},{"line_number":699,"context_line":"  33.0.0 the actual implementation uses maximum 5 threads."},{"line_number":700,"context_line":"* Any positive integer representing maximum number of live migrations"},{"line_number":701,"context_line":"  to run concurrently."},{"line_number":702,"context_line":"\"\"\"),"}],"source_content_type":"text/x-python","patch_set":12,"id":"202af1fb_206a8f6f","line":699,"range":{"start_line":697,"start_character":74,"end_line":699,"end_character":58},"updated":"2025-12-11 10:34:21.000000000","message":"```suggestion\n* ``0``: Deprecated since 33.0.0 (Gazpacho). This value was previously treated\n  as unlimited but the actual implementation used maximum 1000 greenthreads.\n  Since this release, the actual implementation now uses maximum 5 threads.\n```","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2267d0c4ea5c90b70fa460fadc6154490a078451","unresolved":false,"context_lines":[{"line_number":694,"context_line":""},{"line_number":695,"context_line":"Possible values:"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"* 0 : Deprecated since 33.0.0. This value was treated as unlimited but the"},{"line_number":698,"context_line":"  actual implementation used maximum 1000 greenthread before 33.0.0. After"},{"line_number":699,"context_line":"  33.0.0 the actual implementation uses maximum 5 threads."},{"line_number":700,"context_line":"* Any positive integer representing maximum number of live migrations"},{"line_number":701,"context_line":"  to run concurrently."},{"line_number":702,"context_line":"\"\"\"),"}],"source_content_type":"text/x-python","patch_set":12,"id":"b93c1caa_03908e0c","line":699,"range":{"start_line":697,"start_character":74,"end_line":699,"end_character":58},"in_reply_to":"202af1fb_206a8f6f","updated":"2025-12-17 14:36:19.000000000","message":"Done","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cbf5869cfc73fdaf70ab2e794bc758f805a8f62d","unresolved":true,"context_lines":[{"line_number":742,"context_line":"made to the hypervisor or system with real instance power states"},{"line_number":743,"context_line":"for performance reasons, for example, with Ironic."},{"line_number":744,"context_line":""},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"Possible values:"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"* Any positive integer representing threads count."}],"source_content_type":"text/x-python","patch_set":12,"id":"84ee3907_7469f03a","line":745,"updated":"2025-12-11 10:34:21.000000000","message":"nit: extra newline?","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2267d0c4ea5c90b70fa460fadc6154490a078451","unresolved":false,"context_lines":[{"line_number":742,"context_line":"made to the hypervisor or system with real instance power states"},{"line_number":743,"context_line":"for performance reasons, for example, with Ironic."},{"line_number":744,"context_line":""},{"line_number":745,"context_line":""},{"line_number":746,"context_line":"Possible values:"},{"line_number":747,"context_line":""},{"line_number":748,"context_line":"* Any positive integer representing threads count."}],"source_content_type":"text/x-python","patch_set":12,"id":"e308e81c_93ce2d51","line":745,"in_reply_to":"84ee3907_7469f03a","updated":"2025-12-17 14:36:19.000000000","message":"Done","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6a991ce2379be1facd3d067d0c92b44a85fc8a88","unresolved":true,"context_lines":[{"line_number":694,"context_line":""},{"line_number":695,"context_line":"Possible values:"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"* ``0``: Deprecated since 33.0.0 (Gazpacho). This value was previously treated"},{"line_number":698,"context_line":"  as unlimited but the actual implementation used maximum 1000 greenthreads."},{"line_number":699,"context_line":"  Since this release, the actual implementation now uses maximum 5 threads."},{"line_number":700,"context_line":"* Any positive integer representing maximum number of live migrations"},{"line_number":701,"context_line":"  to run concurrently."},{"line_number":702,"context_line":"\"\"\"),"}],"source_content_type":"text/x-python","patch_set":14,"id":"58ba6f30_0e6be616","line":699,"range":{"start_line":697,"start_character":0,"end_line":699,"end_character":75},"updated":"2026-01-14 12:10:18.000000000","message":"nit: ack so we are not actully adding max\u003d5 to the config option just changign the meanign of 0 to be 5.\n\nthis perhaps coudl be a little clearer\n\n```suggestion\n* ``0``: Deprecated since 33.0.0 (Gazpacho). This value was previously treated\n  as unlimited but the actual implementation used maximum 1000 greenthreads.\n  From the 33.0.0 release, the actual implementation now uses 5 threads as the\n  unlimited value. larger values must be specified explicitly.\n```","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3bb864023d982946c60e04b6b0d1f45683c2494e","unresolved":true,"context_lines":[{"line_number":694,"context_line":""},{"line_number":695,"context_line":"Possible values:"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"* ``0``: Deprecated since 33.0.0 (Gazpacho). This value was previously treated"},{"line_number":698,"context_line":"  as unlimited but the actual implementation used maximum 1000 greenthreads."},{"line_number":699,"context_line":"  Since this release, the actual implementation now uses maximum 5 threads."},{"line_number":700,"context_line":"* Any positive integer representing maximum number of live migrations"},{"line_number":701,"context_line":"  to run concurrently."},{"line_number":702,"context_line":"\"\"\"),"}],"source_content_type":"text/x-python","patch_set":14,"id":"61b98eda_e200423e","line":699,"range":{"start_line":697,"start_character":0,"end_line":699,"end_character":75},"in_reply_to":"58ba6f30_0e6be616","updated":"2026-01-14 14:32:48.000000000","message":"agreed with Sean, we need to mention the correct release, but instead of saying \"5 threads as the unlimited value\", we can say \"5 threads as the default capped value\"","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"e4c5157924d4cd3cd7baeccd30b4a707dfea92c3","unresolved":true,"context_lines":[{"line_number":694,"context_line":""},{"line_number":695,"context_line":"Possible values:"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"* ``0``: Deprecated since 33.0.0 (Gazpacho). This value was previously treated"},{"line_number":698,"context_line":"  as unlimited but the actual implementation used maximum 1000 greenthreads."},{"line_number":699,"context_line":"  Since this release, the actual implementation now uses maximum 5 threads."},{"line_number":700,"context_line":"* Any positive integer representing maximum number of live migrations"},{"line_number":701,"context_line":"  to run concurrently."},{"line_number":702,"context_line":"\"\"\"),"}],"source_content_type":"text/x-python","patch_set":14,"id":"90dd3bc6_b9b7ff2c","line":699,"range":{"start_line":697,"start_character":0,"end_line":699,"end_character":75},"in_reply_to":"61b98eda_e200423e","updated":"2026-01-14 19:35:30.000000000","message":"If we are just deprecating it (means it is still supported) then we should not change the behavior in eventlet mode during deprecation phase.\n\nIf we are not supporting it then we should call it as \u0027removed\u0027 and change the \u0027min\u0027 to 1.\n\nIMO, we should call it deprecated but do not change/keep it unlimited for eventlet mode. For threading mode, we can call it not supported and consider 5 as default for min. After deprecation phase which can be next cycle() or when we remove the evenlet mode then we can change the \u0027min\u0027 to 1 and unlimited goes away.","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8397083555296a35583590929c9db1d3fd19c83e","unresolved":false,"context_lines":[{"line_number":694,"context_line":""},{"line_number":695,"context_line":"Possible values:"},{"line_number":696,"context_line":""},{"line_number":697,"context_line":"* ``0``: Deprecated since 33.0.0 (Gazpacho). This value was previously treated"},{"line_number":698,"context_line":"  as unlimited but the actual implementation used maximum 1000 greenthreads."},{"line_number":699,"context_line":"  Since this release, the actual implementation now uses maximum 5 threads."},{"line_number":700,"context_line":"* Any positive integer representing maximum number of live migrations"},{"line_number":701,"context_line":"  to run concurrently."},{"line_number":702,"context_line":"\"\"\"),"}],"source_content_type":"text/x-python","patch_set":14,"id":"3078d766_5e807dad","line":699,"range":{"start_line":697,"start_character":0,"end_line":699,"end_character":75},"in_reply_to":"90dd3bc6_b9b7ff2c","updated":"2026-01-15 13:42:26.000000000","message":"Went with Gmaan\u0027s suggestion","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ecccde7494a6970960b08d04445a5708064e3c53","unresolved":false,"context_lines":[{"line_number":699,"context_line":"  1000 greenthreads. Since this release, the implementation keep using 1000"},{"line_number":700,"context_line":"  greenthreads in eventlet mode and will use 5 native threads in threading"},{"line_number":701,"context_line":"  mode. In the future release when eventlet support is removed, 0 as a valid"},{"line_number":702,"context_line":"  value will also be removed."},{"line_number":703,"context_line":"* Any positive integer representing maximum number of live migrations"},{"line_number":704,"context_line":"  to run concurrently."},{"line_number":705,"context_line":"\"\"\"),"}],"source_content_type":"text/x-python","patch_set":15,"id":"15f047ea_d656c512","line":702,"updated":"2026-01-15 15:41:20.000000000","message":"++","commit_id":"a5e75d15af3ed599c5c4065e4c6838c44d3e5f01"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5e9654d20672cf2d1cbacf6d015cfecd9de5333e","unresolved":true,"context_lines":[{"line_number":11755,"context_line":"    def test_max_concurrent_live_semaphore_unlimited(self):"},{"line_number":11756,"context_line":"        self.flags(max_concurrent_live_migrations\u003d0)"},{"line_number":11757,"context_line":"        mgr \u003d manager.ComputeManager()"},{"line_number":11758,"context_line":"        self.assertEqual(5, mgr._live_migration_executor._max_workers)"},{"line_number":11759,"context_line":""},{"line_number":11760,"context_line":"    @mock.patch(\u0027nova.objects.InstanceGroup.get_by_instance_uuid\u0027, mock.Mock("},{"line_number":11761,"context_line":"        side_effect\u003dexception.InstanceGroupNotFound(group_uuid\u003d\u0027\u0027)))"}],"source_content_type":"text/x-python","patch_set":15,"id":"cb74caf7_0d33ebaa","line":11758,"updated":"2026-01-16 08:35:20.000000000","message":"OK so this is the reason of the unit test failure. In the PS14 both eventlet and threading mode had a new definition of \"unlimited\" being 5. But in PS15, as Gmaan requested, we restored the old 1000 meaning of eventlet mode. This testcase now needs to be conditionally check the value based on the concurrency mode.","commit_id":"a5e75d15af3ed599c5c4065e4c6838c44d3e5f01"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"b92d55a5471f0dcfb4fcbf662d3c72277761af7e","unresolved":false,"context_lines":[{"line_number":11755,"context_line":"    def test_max_concurrent_live_semaphore_unlimited(self):"},{"line_number":11756,"context_line":"        self.flags(max_concurrent_live_migrations\u003d0)"},{"line_number":11757,"context_line":"        mgr \u003d manager.ComputeManager()"},{"line_number":11758,"context_line":"        self.assertEqual(5, mgr._live_migration_executor._max_workers)"},{"line_number":11759,"context_line":""},{"line_number":11760,"context_line":"    @mock.patch(\u0027nova.objects.InstanceGroup.get_by_instance_uuid\u0027, mock.Mock("},{"line_number":11761,"context_line":"        side_effect\u003dexception.InstanceGroupNotFound(group_uuid\u003d\u0027\u0027)))"}],"source_content_type":"text/x-python","patch_set":15,"id":"e376c072_574c0195","line":11758,"in_reply_to":"8f75074d_ff90e333","updated":"2026-01-16 18:46:10.000000000","message":"ah right. I checked master version of this test and thought we kept it 1000 in test in this change but now realized it was changed to 5 in test and that is why it was passing in PS14.","commit_id":"a5e75d15af3ed599c5c4065e4c6838c44d3e5f01"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"38406d5c3c02e20ffcb989629c222b61281cf4b3","unresolved":false,"context_lines":[{"line_number":11755,"context_line":"    def test_max_concurrent_live_semaphore_unlimited(self):"},{"line_number":11756,"context_line":"        self.flags(max_concurrent_live_migrations\u003d0)"},{"line_number":11757,"context_line":"        mgr \u003d manager.ComputeManager()"},{"line_number":11758,"context_line":"        self.assertEqual(5, mgr._live_migration_executor._max_workers)"},{"line_number":11759,"context_line":""},{"line_number":11760,"context_line":"    @mock.patch(\u0027nova.objects.InstanceGroup.get_by_instance_uuid\u0027, mock.Mock("},{"line_number":11761,"context_line":"        side_effect\u003dexception.InstanceGroupNotFound(group_uuid\u003d\u0027\u0027)))"}],"source_content_type":"text/x-python","patch_set":15,"id":"8f75074d_ff90e333","line":11758,"in_reply_to":"cb74caf7_0d33ebaa","updated":"2026-01-16 08:44:52.000000000","message":"Done","commit_id":"a5e75d15af3ed599c5c4065e4c6838c44d3e5f01"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ee9fd5bd5dfd98d8120ab7f6c70c706e450660b7","unresolved":false,"context_lines":[{"line_number":11759,"context_line":"        if utils.concurrency_mode_threading():"},{"line_number":11760,"context_line":"            self.assertEqual(5, mgr._live_migration_executor._max_workers)"},{"line_number":11761,"context_line":"        else:"},{"line_number":11762,"context_line":"            self.assertEqual(1000, mgr._live_migration_executor._max_workers)"},{"line_number":11763,"context_line":""},{"line_number":11764,"context_line":"    @mock.patch(\u0027nova.objects.InstanceGroup.get_by_instance_uuid\u0027, mock.Mock("},{"line_number":11765,"context_line":"        side_effect\u003dexception.InstanceGroupNotFound(group_uuid\u003d\u0027\u0027)))"}],"source_content_type":"text/x-python","patch_set":17,"id":"bb4e5103_daf34476","line":11762,"updated":"2026-01-16 10:44:17.000000000","message":"++","commit_id":"3c23390cc8e9690a995b07c3ecec18a2ea381f59"}],"releasenotes/notes/deprecate-unlimited-max_concurrent_live_migrations-29c54c7eeb77041c.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cbf5869cfc73fdaf70ab2e794bc758f805a8f62d","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The meaning of the 0 value of the config option"},{"line_number":5,"context_line":"    ``[DEFAULT]max_concurrent_live_migrations`` has been changed. In the past"},{"line_number":6,"context_line":"    the implementation of the meaning of \"unlimited\" used maximum 1000"},{"line_number":7,"context_line":"    concurrent worker threads. This is now reduced to 5. It is almost always a"},{"line_number":8,"context_line":"    bad idea to change this config option from its default value, 1."},{"line_number":9,"context_line":"    Please read the `concurrency"},{"line_number":10,"context_line":"    \u003chttps://docs.openstack.org/nova/latest/admin/concurrency.html\u003e`__"},{"line_number":11,"context_line":"    guide for more details."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"d037011c_8b5f88db","line":8,"range":{"start_line":6,"start_character":70,"end_line":8,"end_character":68},"updated":"2025-12-11 10:34:21.000000000","message":"```suggestion\n    the implementation of the meaning of \"unlimited\" used maximum 1000\n    concurrent worker greenthreads. This is now reduced to 5. It is almost\n    always a bad idea to change this config option from its default value, 1.\n```","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2267d0c4ea5c90b70fa460fadc6154490a078451","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The meaning of the 0 value of the config option"},{"line_number":5,"context_line":"    ``[DEFAULT]max_concurrent_live_migrations`` has been changed. In the past"},{"line_number":6,"context_line":"    the implementation of the meaning of \"unlimited\" used maximum 1000"},{"line_number":7,"context_line":"    concurrent worker threads. This is now reduced to 5. It is almost always a"},{"line_number":8,"context_line":"    bad idea to change this config option from its default value, 1."},{"line_number":9,"context_line":"    Please read the `concurrency"},{"line_number":10,"context_line":"    \u003chttps://docs.openstack.org/nova/latest/admin/concurrency.html\u003e`__"},{"line_number":11,"context_line":"    guide for more details."}],"source_content_type":"text/x-yaml","patch_set":12,"id":"f9d684b7_ce7ea334","line":8,"range":{"start_line":6,"start_character":70,"end_line":8,"end_character":68},"in_reply_to":"d037011c_8b5f88db","updated":"2025-12-17 14:36:19.000000000","message":"Done","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cbf5869cfc73fdaf70ab2e794bc758f805a8f62d","unresolved":true,"context_lines":[{"line_number":17,"context_line":"    default value, 1, of this config option. If more performant live migration"},{"line_number":18,"context_line":"    is needed, use the ``live_migration_parallel_connections`` config option"},{"line_number":19,"context_line":"    instead."},{"line_number":20,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":12,"id":"d0329779_a8a73767","line":20,"updated":"2025-12-11 10:34:21.000000000","message":"nit: extra newline","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2267d0c4ea5c90b70fa460fadc6154490a078451","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    default value, 1, of this config option. If more performant live migration"},{"line_number":18,"context_line":"    is needed, use the ``live_migration_parallel_connections`` config option"},{"line_number":19,"context_line":"    instead."},{"line_number":20,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":12,"id":"e7ae3242_4808689a","line":20,"in_reply_to":"d0329779_a8a73767","updated":"2025-12-17 14:36:19.000000000","message":"Done","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"}],"releasenotes/notes/new-default-sync_power_state_thread_pool_size-d2fc2c895f65a34f.yaml":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"cbf5869cfc73fdaf70ab2e794bc758f805a8f62d","unresolved":true,"context_lines":[{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The default value of the configuration option"},{"line_number":5,"context_line":"    ``[DEFAULT]sync_power_state_thread_pool_size`` is changed from 1000 to 5 to"},{"line_number":6,"context_line":"    have a value that is safe to use in native threading mode. If you are still"},{"line_number":7,"context_line":"    using the eventlet mode and relying on a higher value then configure that"},{"line_number":8,"context_line":"    higher value explicitly before the upgrade. Please read the"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"76479da1_3cd23078","line":5,"updated":"2025-12-11 10:34:21.000000000","message":"Um, I can\u0027t find any references to this? Does this release note still make sense?","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"6a991ce2379be1facd3d067d0c92b44a85fc8a88","unresolved":false,"context_lines":[{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The default value of the configuration option"},{"line_number":5,"context_line":"    ``[DEFAULT]sync_power_state_thread_pool_size`` is changed from 1000 to 5 to"},{"line_number":6,"context_line":"    have a value that is safe to use in native threading mode. If you are still"},{"line_number":7,"context_line":"    using the eventlet mode and relying on a higher value then configure that"},{"line_number":8,"context_line":"    higher value explicitly before the upgrade. Please read the"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"10a0f2fc_d15fa87f","line":5,"in_reply_to":"6ebdf0a5_b3ab3f87","updated":"2026-01-14 12:10:18.000000000","message":"Acknowledged","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2267d0c4ea5c90b70fa460fadc6154490a078451","unresolved":true,"context_lines":[{"line_number":2,"context_line":"upgrade:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The default value of the configuration option"},{"line_number":5,"context_line":"    ``[DEFAULT]sync_power_state_thread_pool_size`` is changed from 1000 to 5 to"},{"line_number":6,"context_line":"    have a value that is safe to use in native threading mode. If you are still"},{"line_number":7,"context_line":"    using the eventlet mode and relying on a higher value then configure that"},{"line_number":8,"context_line":"    higher value explicitly before the upgrade. Please read the"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"6ebdf0a5_b3ab3f87","line":5,"in_reply_to":"76479da1_3cd23078","updated":"2025-12-17 14:36:19.000000000","message":"Conf change happened her https://review.opendev.org/c/openstack/nova/+/966016/12/nova/conf/compute.py#737 and the commit message describes it.","commit_id":"89232562f3baee92f9e945cda4b29efe7c08f18d"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"3bb864023d982946c60e04b6b0d1f45683c2494e","unresolved":true,"context_lines":[{"line_number":7,"context_line":"    using the eventlet mode and relying on a higher value then configure that"},{"line_number":8,"context_line":"    higher value explicitly before the upgrade. Please read the"},{"line_number":9,"context_line":"    `concurrency \u003chttps://docs.openstack.org/nova/latest/admin/concurrency.html\u003e`__"},{"line_number":10,"context_line":"    guide for more details."},{"line_number":11,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":14,"id":"9532d07b_0977e473","line":10,"updated":"2026-01-14 14:32:48.000000000","message":"why do we need another reno change ? we could just use the same file for both of the upgrade points.","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6d19e1f3e8d5b6283daaec2b7e3632e1e3c7b1ef","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    using the eventlet mode and relying on a higher value then configure that"},{"line_number":8,"context_line":"    higher value explicitly before the upgrade. Please read the"},{"line_number":9,"context_line":"    `concurrency \u003chttps://docs.openstack.org/nova/latest/admin/concurrency.html\u003e`__"},{"line_number":10,"context_line":"    guide for more details."},{"line_number":11,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":14,"id":"260c2cc8_d3f02651","line":10,"in_reply_to":"50f2341d_0fa5f683","updated":"2026-01-15 13:43:02.000000000","message":"Done","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"e4c5157924d4cd3cd7baeccd30b4a707dfea92c3","unresolved":true,"context_lines":[{"line_number":7,"context_line":"    using the eventlet mode and relying on a higher value then configure that"},{"line_number":8,"context_line":"    higher value explicitly before the upgrade. Please read the"},{"line_number":9,"context_line":"    `concurrency \u003chttps://docs.openstack.org/nova/latest/admin/concurrency.html\u003e`__"},{"line_number":10,"context_line":"    guide for more details."},{"line_number":11,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":14,"id":"c2af3f9d_dce10896","line":10,"in_reply_to":"9532d07b_0977e473","updated":"2026-01-14 19:35:30.000000000","message":"yeah, it can be in same file. I commented (after seeing this file I deleted) about missing upgrade notes for change in sync_power_state_thread_pool_size default value.","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8397083555296a35583590929c9db1d3fd19c83e","unresolved":true,"context_lines":[{"line_number":7,"context_line":"    using the eventlet mode and relying on a higher value then configure that"},{"line_number":8,"context_line":"    higher value explicitly before the upgrade. Please read the"},{"line_number":9,"context_line":"    `concurrency \u003chttps://docs.openstack.org/nova/latest/admin/concurrency.html\u003e`__"},{"line_number":10,"context_line":"    guide for more details."},{"line_number":11,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":14,"id":"50f2341d_0fa5f683","line":10,"in_reply_to":"c2af3f9d_dce10896","updated":"2026-01-15 13:42:26.000000000","message":"I merged the two notes. This is probably a result of my doing squashes of even smaller patches locally...","commit_id":"52edf22ddbd9ecf6b71d2d57c0a0bf587da78ef9"}]}
