)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3404f7e028f0cf2c4669a46f6630306ab53b9bf6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":20,"id":"b6a1b951_3e9ea88b","updated":"2026-08-06 14:46:43.000000000","message":"Looks to me like the cephadm job is skipping all the migration tests?\n```\ntest_cold_migrate_revert_with_share_via_virtiofs[backend,id-d4e5f6a7-b8c9-0123-d4e5-f6a7b8c90123,positive]\nskip\ntest_cold_migrate_with_share_via_virtiofs[backend,id-c3d4e5f6-a7b8-9012-c3d4-e5f6a7b89012,positive]\nskip\ntest_mount_share_via_virtiofs[backend,id-a1b2c3d4-e5f6-7890-a1b2-c3d4e5f67890,positive]\npass\ntest_multiple_shares_via_virtiofs[backend,id-b2c3d4e5-f6a7-8901-b2c3-d4e5f6a78901,positive]\npass\ntest_resize_revert_with_share_via_virtiofs[backend,id-f6a7b8c9-d0e1-2345-f6a7-b8c9d0e12345,positive]\nskip\ntest_resize_with_share_via_virtiofs[backend,id-e5f6a7b8-c9d0-1234-e5f6-a7b8c9d01234,positive]\nskip\n```\n\nAm I reading that wrong?","commit_id":"c6a327497793c31a80859cd5686c73d3a4bf7f66"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"dfb7cd9b487723fc7b29351aa2d3d4b75eaba73e","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":20,"id":"2cbb00f7_2a842023","in_reply_to":"b6a1b951_3e9ea88b","updated":"2026-08-07 06:30:54.000000000","message":"nope, \n\nnot wrong. the Cephadm/CephFS job is running single-node, and so is skipping all these new cold migration/resize tests. \n\n\"nova-share-attachment-lvm-multinode\" is running these since it has two nodes (controller/compute, compute)\n\nMy eventual goal is to enable this testing in one of the existing nova jobs if I can.. we\u0027ll be running a bit of the matrix of testing against manila and manila-tempest-plugin repos as well.","commit_id":"c6a327497793c31a80859cd5686c73d3a4bf7f66"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c19d473c358e7cf66c8a9f73bdb57215c3c0f4d2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"534121ef_b658709e","updated":"2026-08-07 06:23:03.000000000","message":"Thanks for the review Dan; ptal at the latest patch","commit_id":"b50090d160d6b3084275dd39136a2c587d53684f"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b0cba20ac3f1ad7ff6181d7563e946a97e794e4d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"4d85d987_9f91ac12","updated":"2026-08-14 13:54:27.000000000","message":"I\u0027ll try to reproduce this issue again and verify that it works to let me resolve my issue without surgery.","commit_id":"9645e79dafe4ad08357c448225d1922ea4055a1d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f1692b0758e2fb8a9c38bdbc057b24bdf9e7fa3a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"3a77ce63_9607baf5","updated":"2026-08-17 22:44:27.000000000","message":"New PS incoming","commit_id":"9645e79dafe4ad08357c448225d1922ea4055a1d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8f05466bf1e07f64389c5b9e18c9dd37cc8bb74a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":24,"id":"80a93220_ddc76507","updated":"2026-08-17 15:17:33.000000000","message":"Okay so I\u0027m not sure we\u0027re making much progress here. To test PS24, I:\n\n1. Booted an instance on host 1\n2. Powered it off, attached the share, started the instance\n3. Prepared host 2 _without_ proper manila config (which simulates misconfiguration _or_ a transient failure for the destination host while talking to manila).\n4. Started the migration\n\nIt failed in the expected way, where I saw the keystoneauth trace. The instance is assigned to host 2 according to nova. No libvirt VM exists, and the source libvirt VM is still present but powered off. As a user there\u0027s nothing I can do (start/stop) to get out of this. That\u0027s maybe okay in this case because it\u0027s a configuration/infrastructure problem.\n\nHowever, if I fix the config on the destination (simulating fixing the config problem _or_ restoring network connectivity to manila, I can\u0027t restart my instance because:\n\n```\nAug 17 14:59:12 noble2 nova-compute[284927]: ERROR oslo_messaging.rpc.server Reason: Unexpected error while running command.\nAug 17 14:59:12 noble2 nova-compute[284927]: ERROR oslo_messaging.rpc.server Command: mount -t nfs 192.168.122.164:/opt/stack/data/manila/mnt/share-9a4628b1-7003-489a-9532-d0885dcbec59 /opt/stack/data/nova/mnt/36b9778e31a6d0ee3ecd3b7cd007e4d7\nAug 17 14:59:12 noble2 nova-compute[284927]: ERROR oslo_messaging.rpc.server Exit code: 32\nAug 17 14:59:12 noble2 nova-compute[284927]: ERROR oslo_messaging.rpc.server Stdout: \u0027\u0027\nAug 17 14:59:12 noble2 nova-compute[284927]: ERROR oslo_messaging.rpc.server Stderr: \u0027mount.nfs: access denied by server while mounting 192.168.122.164:/opt/stack/data/manila/mnt/share-9a4628b1-7003-489a-9532-d0885dcbec59\\n\u0027.\n```\n\nI can confirm that the share is only allowed from the source machine. So again I\u0027m stuck. I assume that at this point I could probably add a new share rule for the destination and get out of jail, which is better than DB surgery, but also kinda frustrating. If a user hits this during a resize due to a transient network outage, they will have to file a ticket to get the admin to manually fix things up. I assume this is because the only time you do `grant_access()` is in `_finish_resize()` and we get exactly one shot to jump through that hoop.\n\nPerhaps we could make start and hard_reboot ensure we have granted ourselves access to the shares we\u0027re about to mount? Being a big distributed system with expected failures, those sorts of idempotent fixups are necessary IMHO.","commit_id":"9645e79dafe4ad08357c448225d1922ea4055a1d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"26687b5b69c09a428dff1be7ee4fb189e84b76d2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"31f44510_876988df","updated":"2026-08-14 19:02:58.000000000","message":"Thanks for testing this Dan!","commit_id":"9645e79dafe4ad08357c448225d1922ea4055a1d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"333277d864680a7f7454ea5b594025d2264fed22","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"cb4fd0be_f38be336","in_reply_to":"0c9fb029_c3fe6fbc","updated":"2026-08-19 06:07:34.000000000","message":"++ I added a try..except around grant_access so that we can try mounting and fail in case manila isn\u0027t reachable.","commit_id":"9645e79dafe4ad08357c448225d1922ea4055a1d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9655e3a5fe0ecb4fd02120f140709b2781f6cbd2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"0c9fb029_c3fe6fbc","in_reply_to":"1670f474_74f112ea","updated":"2026-08-18 16:41:19.000000000","message":"Yeah, it is obviously best to not require other services to be up in order to start instances but AFAIK we require things like neutron to work (for VIF plugging). That said, you could definitely attempt to make the call to manila, and if we fail to contact it and confirm access, we assume we have it and try the start anyway. If we fail, as long as it tries again on the next start, we\u0027d eventually resolve the situation.","commit_id":"9645e79dafe4ad08357c448225d1922ea4055a1d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f1692b0758e2fb8a9c38bdbc057b24bdf9e7fa3a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":24,"id":"da99cf29_8d3f4cd6","in_reply_to":"80a93220_ddc76507","updated":"2026-08-17 22:44:27.000000000","message":"Hey Dan! Good catch and thanks for the hardening suggestion.. I agree; Initially I thought I could just cover the recovery paths, but, like you said, adding idempotency to the mount logic (i.e., invoking \"grant_access\" prior to mount) would harden this well. At worse, we make one extra call to Manila to check if there\u0027s access on a share where everything is working. The only downside is that, for a VM to be able to mount safely, we introduce a dependency on a control plane service (Manila) - I may be overthinking this, but, this should be perfectly fine in a normal operation of the cloud. My overthinking brain is picturing a control plane disruption where someone\u0027s also resizing their nova VM, and this thing stops them. The fix is to restore access to the Manila service... Let me know what you think about that. In essence this isn\u0027t that much different from using cinder during volume attaches in the course of a migration..","commit_id":"9645e79dafe4ad08357c448225d1922ea4055a1d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"881675570a0f4481282c49aed0448d68a90728ff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"1670f474_74f112ea","in_reply_to":"8ab3a4e7_2d90c801","updated":"2026-08-17 23:35:22.000000000","message":"(the happy path tests are being run on a multinode devstack job here: https://review.opendev.org/c/openstack/nova/+/999772)","commit_id":"9645e79dafe4ad08357c448225d1922ea4055a1d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e4f814235b54f238fcb8066ae952c48f3a983dc0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":24,"id":"8ab3a4e7_2d90c801","in_reply_to":"da99cf29_8d3f4cd6","updated":"2026-08-17 23:34:35.000000000","message":"Besides testing the 6 happy path tests on a multinode devstack setup, I also ran through 3 destructive tests with this latest PS. \n\n- Setting Manila API down during cold migrate; observing grant_access fails and  instance going to \"ERROR\". Then hard reboot recovers with share attachments (after API is unblocked again).\n- Blocking NFS access (via iptables REJECT on server) during cold migration; observing mount failure translating to instance in ERROR state. Using reset-state and then stop/start to recover with share attachments (after ip table rules are restored)\n- Seeding some invalid Manila auth on destination host. This causes Keystone to throw an \"Unauthorized\" exception during grant_access; and instance goes to \"ERROR\".. As with the first case, a hard reboot now recovers with share attachments (after config is fixed).\n\nAll of this focused on recovery without operator intervention... Would be glad if you could re-test and let me know.","commit_id":"9645e79dafe4ad08357c448225d1922ea4055a1d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"65d9afe1ce24c3cc83dfee353c7bf872ab1e711a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"043965c5_0415a7df","updated":"2026-08-20 16:06:27.000000000","message":"After lots of back and forth with instances that couldn\u0027t start due to various setup failures, I\u0027m now able to migrate and resize back and forth with this patch.\n\nDuring RESIZE_CONFIRM state I can see both hosts have an access rule and the one that wins post confirm/revert gets removed as expected. Deleting an access rule for the host causes it to be re-added by compute during startup, healing shared-state corruption between the services (with the exception of the stuck rule we\u0027re debugging separately, but that may be a manila thing).","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"f4608e68774afcb726cb8769bb42d0966b32a4d1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"91649449_b7c95c74","updated":"2026-08-19 21:21:38.000000000","message":"I see nothing in the logs that looks relevant. I skim checked INFO and DEBUG and don\u0027t even see the share access UUID logged. Here\u0027s everything greater than info:\n```\ndan@noble:/opt/stack/nova$ jc24 devstack@m-shr | grep -Ev \u0027(INFO|DEBUG)\u0027\nAug 19 17:52:42 noble manila-share[1594]: ERROR manila.share.manager [None req-e6e1cd20-7a7f-4ead-92a9-e88a1b649dc3 None None] Error encountered during initialization of driver LVMShareDriver@noble@london: manila.exception.InvalidParameterValue: Share volume group lvm-shares doesn\u0027t exist.\nAug 19 17:52:42 noble manila-share[1594]: ERROR manila.share.manager Traceback (most recent call last):\nAug 19 17:52:42 noble manila-share[1594]: ERROR manila.share.manager   File \"/opt/stack/manila/manila/share/manager.py\", line 395, in _driver_setup\nAug 19 17:52:42 noble manila-share[1594]: ERROR manila.share.manager     self.driver.check_for_setup_error()\nAug 19 17:52:42 noble manila-share[1594]: ERROR manila.share.manager   File \"/opt/stack/manila/manila/share/drivers/lvm.py\", line 86, in check_for_setup_error\nAug 19 17:52:42 noble manila-share[1594]: ERROR manila.share.manager     raise exception.InvalidParameterValue(err\u003dmsg)\nAug 19 17:52:42 noble manila-share[1594]: ERROR manila.share.manager manila.exception.InvalidParameterValue: Share volume group lvm-shares doesn\u0027t exist.\nAug 19 17:52:42 noble manila-share[1594]: ERROR manila.share.manager\nAug 19 18:02:45 noble manila-share[1594]: ERROR dbcounter [-] Failed to account for access to database \u0027manila\u0027: (pymysql.err.OperationalError) (2006, \"MySQL server has gone away (SSLEOFError(8, \u0027EOF occurred in violation of protocol (_ssl.c:2406)\u0027))\")\nAug 19 18:02:45 noble manila-share[1594]: [SQL: INSERT INTO queries (db, op, count)   VALUES (%(db)s, %(op)s, %(count)s)   ON DUPLICATE KEY UPDATE count\u003dcount+%(count)s]\nAug 19 18:02:45 noble manila-share[1594]: [parameters: {\u0027db\u0027: \u0027manila\u0027, \u0027op\u0027: \u0027SELECT\u0027, \u0027count\u0027: 2}]\nAug 19 18:02:45 noble manila-share[1594]: (Background on this error at: https://sqlalche.me/e/20/e3q8): sqlalchemy.exc.OperationalError: (pymysql.err.OperationalError) (2006, \"MySQL server has gone away (SSLEOFError(8, \u0027EOF occurred in violation of protocol (_ssl.c:2406)\u0027))\")\nAug 19 18:02:46 noble systemd[1]: Stopping devstack@m-shr.service - Devstack devstack@m-shr.service...\nAug 19 18:02:47 noble manila-share[841]: WARNING manila.service [None req-edbc198a-87bd-4463-8f04-6ca352196db7 None None] Service stopped that has no database entry.: manila.exception.ServiceNotFound: Service None could not be found.\nAug 19 18:03:46 noble systemd[1]: devstack@m-shr.service: Main process exited, code\u003dkilled, status\u003d14/ALRM\nAug 19 18:03:46 noble systemd[1]: devstack@m-shr.service: Failed with result \u0027signal\u0027.\nAug 19 18:03:46 noble systemd[1]: devstack@m-shr.service: Unit process 1594 (manila-share) remains running after unit stopped.\nAug 19 18:03:46 noble systemd[1]: devstack@m-shr.service: Unit process 1706 (privsep-helper) remains running after unit stopped.\nAug 19 18:03:46 noble systemd[1]: Stopped devstack@m-shr.service - Devstack devstack@m-shr.service.\nAug 19 18:03:46 noble systemd[1]: devstack@m-shr.service: Consumed 6min 302ms CPU time, 225.6M memory peak, 0B memory swap peak.\nAug 19 18:03:46 noble systemd[1]: devstack@m-shr.service: Found left-over process 1594 (manila-share) in control group while starting unit. Ignoring.\nAug 19 18:03:46 noble systemd[1]: devstack@m-shr.service: This usually indicates unclean termination of a previous run, or service implementation deficiencies.\nAug 19 18:03:46 noble systemd[1]: devstack@m-shr.service: Found left-over process 1706 (privsep-helper) in control group while starting unit. Ignoring.\nAug 19 18:03:46 noble systemd[1]: devstack@m-shr.service: This usually indicates unclean termination of a previous run, or service implementation deficiencies.\nAug 19 18:03:46 noble systemd[1]: Started devstack@m-shr.service - Devstack devstack@m-shr.service.\nAug 19 18:03:47 noble manila-share[59995]: /opt/stack/manila/manila/monkey_patch.py:38: EventletDeprecationWarning:\nAug 19 18:03:47 noble manila-share[59995]: Eventlet is deprecated. It is currently being maintained in bugfix mode, and\nAug 19 18:03:47 noble manila-share[59995]: we strongly recommend against using it for new projects.\nAug 19 18:03:47 noble manila-share[59995]: If you are already using Eventlet, we recommend migrating to a different\nAug 19 18:03:47 noble manila-share[59995]: framework.  For more detail see\nAug 19 18:03:47 noble manila-share[59995]: https://eventlet.readthedocs.io/en/latest/asyncio/migration.html\nAug 19 18:03:47 noble manila-share[59995]:   import eventlet\nAug 19 18:03:49 noble sudo[60009]:      dan : PWD\u003d/ ; USER\u003droot ; COMMAND\u003d/usr/local/bin/privsep-helper --config-file /etc/manila/manila.conf --privsep_context manila.privsep.sys_admin_pctxt --privsep_sock_path /tmp/tmpoztshb4r/privsep.sock\nAug 19 18:03:49 noble sudo[60009]: pam_unix(sudo:session): session opened for user root(uid\u003d0) by (uid\u003d1000)\nAug 19 18:03:49 noble manila-share[60006]: WARNING oslo.privsep.daemon [-] privsep log: /opt/stack/data/venv/lib/python3.12/site-packages/oslo_privsep/daemon.py:105: EventletDeprecationWarning:\nAug 19 18:03:49 noble manila-share[60006]: WARNING oslo.privsep.daemon [-] privsep log: Eventlet is deprecated. It is currently being maintained in bugfix mode, and\nAug 19 18:03:49 noble manila-share[60006]: WARNING oslo.privsep.daemon [-] privsep log: we strongly recommend against using it for new projects.\nAug 19 18:03:49 noble manila-share[60006]: WARNING oslo.privsep.daemon [-] privsep log:\nAug 19 18:03:49 noble manila-share[60006]: WARNING oslo.privsep.daemon [-] privsep log: If you are already using Eventlet, we recommend migrating to a different\nAug 19 18:03:49 noble manila-share[60006]: WARNING oslo.privsep.daemon [-] privsep log: framework.  For more detail see\nAug 19 18:03:49 noble manila-share[60006]: WARNING oslo.privsep.daemon [-] privsep log: https://eventlet.readthedocs.io/en/latest/asyncio/migration.html\nAug 19 18:03:49 noble manila-share[60006]: WARNING oslo.privsep.daemon [-] privsep log:\nAug 19 18:03:49 noble manila-share[60006]: WARNING oslo.privsep.daemon [-] privsep log:   import eventlet\nAug 19 18:03:49 noble sudo[60009]: pam_unix(sudo:session): session closed for user root\nAug 19 20:03:52 noble manila-share[60006]: ERROR oslo.messaging._drivers.impl_rabbit [-] [0a398b59-9958-42c4-b710-22f175ee2a9e] AMQP server on 192.168.122.164:5672 is unreachable: Too many heartbeats missed. Trying again in 1 seconds.: amqp.exceptions.ConnectionForced: Too many heartbeats missed\nAug 19 21:16:50 noble manila-share[60006]: ERROR oslo.messaging._drivers.impl_rabbit [-] [0a398b59-9958-42c4-b710-22f175ee2a9e] AMQP server on 192.168.122.164:5672 is unreachable: Too many heartbeats missed. Trying again in 1 seconds.: amqp.exceptions.ConnectionForced: Too many heartbeats missed\n```\nThe rabbit issues are when the system resumes from sleep, so I think you can ignore those.","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3a0ab47ea062f6c38470b1d85ee26e2e3970c5fd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"c37b0806_0cb19e70","updated":"2026-08-19 18:30:41.000000000","message":"So I guess this is why it thinks it doesn\u0027t need to re-share:\n```\ndan@noble:/opt/stack/nova$ oa share access list 9f40e823-3f6d-4125-989f-2d52d93e2f6a\n+------------------------+-------------+-----------------+--------------+-----------------+------------+------------------------+--------------------------+\n| ID                     | Access Type | Access To       | Access Level | State           | Access Key | Created At             | Updated At               |\n+------------------------+-------------+-----------------+--------------+-----------------+------------+------------------------+--------------------------+\n| 630af931-67b1-477d-    | ip          | 192.168.122.130 | rw           | queued_to_apply | None       | 2026-08-               | None                     |\n| abd6-54888225e9f1      |             |                 |              |                 |            | 19T17:56:52.167760     |                          |\n| 7ad046c6-beed-4a83-    | ip          | 192.168.122.164 | rw           | active          | None       | 2026-08-               | 2026-08-                 |\n| ab91-3d3d25312d9c      |             |                 |              |                 |            | 12T14:24:56.044087     | 12T14:24:57.333430       |\n+------------------------+-------------+-----------------+--------------+-----------------+------------+------------------------+--------------------------+\n```\nIt\u0027s queued to apply that share but didn\u0027t actually happen. Presumably I could delete that rule and then restarting the instance would try again to add it now that m-shr has the LVM group? Attempt:\n```\ndan@noble:/opt/stack/nova$ oa share access delete 9f40e823-3f6d-4125-989f-2d52d93e2f6a 630af931-67b1-477d-abd6-54888225e9f1\nFailed to delete share access rule 630af931-67b1-477d-abd6-54888225e9f1 for share 9f40e823-3f6d-4125-989f-2d52d93e2f6a: Cannot deny access for share \u00279f40e823-3f6d-4125-989f-2d52d93e2f6a\u0027 since it has been locked. Please remove the locks and retry the operation (HTTP 403) (Request-ID: req-0f3f2044-39f9-4713-8979-2c016563b718)\n```\nIs this something ``--unrestrict`` will bypass (safely?) or some other action I need to do?","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e4b7f803ec6d5954e6608f84b87cbae632690375","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"025e45f5_d9b69fbe","updated":"2026-08-19 18:08:16.000000000","message":"So, I applied the latest patch to my two-node system with an instance that is already wedged in the bad state previously. After restarting both n-cpu services (with fixed config so it can contact manila). I attempted to stop/start the wedged instance. This log traffic from the node it\u0027s stuck on seemed promising that it noticed that the share was not exported to the current host and tried, but failed to fix it:\n\n```\nAug 19 17:56:51 noble2 nova-compute[324847]: DEBUG nova.share.manila [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Get share access id for share id:\u00279f40e823-3f6d-4125-989f-2d52d93e2f6a\u0027 {{(pid\u003d324847) get_access /opt/stack/nova/nova/share/manila.py:241}}\nAug 19 17:56:52 noble2 nova-compute[324847]: DEBUG nova.share.manila [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Allow host access to share id:\u00279f40e823-3f6d-4125-989f-2d52d93e2f6a\u0027 {{(pid\u003d324847) allow /opt/stack/nova/nova/share/manila.py:284}}\nAug 19 17:56:52 noble2 nova-compute[324847]: DEBUG nova.share.manila [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Get share access id for share id:\u00279f40e823-3f6d-4125-989f-2d52d93e2f6a\u0027 {{(pid\u003d324847) get_access /opt/stack/nova/nova/share/manila.py:241}}\nAug 19 17:56:52 noble2 nova-compute[324847]: DEBUG nova.compute.share_management [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Waiting policy to be set on share 9f40e823-3f6d-4125-989f-2d52d93e2f6a  {{(pid\u003d324847) _wait_for_access_policy /opt/stack/nova/nova/compute/share_management.py:129}}\nAug 19 17:56:53 noble2 nova-compute[324847]: DEBUG nova.share.manila [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Get share access id for share id:\u00279f40e823-3f6d-4125-989f-2d52d93e2f6a\u0027 {{(pid\u003d324847) get_access /opt/stack/nova/nova/share/manila.py:241}}\nAug 19 17:56:54 noble2 nova-compute[324847]: DEBUG nova.compute.share_management [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Waiting policy to be set on share 9f40e823-3f6d-4125-989f-2d52d93e2f6a  {{(pid\u003d324847) _wait_for_access_policy /opt/stack/nova/nova/compute/share_management.py:129}}\nAug 19 17:56:55 noble2 nova-compute[324847]: DEBUG nova.share.manila [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Get share access id for share id:\u00279f40e823-3f6d-4125-989f-2d52d93e2f6a\u0027 {{(pid\u003d324847) get_access /opt/stack/nova/nova/share/manila.py:241}}\nAug 19 17:56:55 noble2 nova-compute[324847]: DEBUG nova.compute.share_management [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Waiting policy to be set on share 9f40e823-3f6d-4125-989f-2d52d93e2f6a  {{(pid\u003d324847) _wait_for_access_policy /opt/stack/nova/nova/compute/share_management.py:129}}\nAug 19 17:56:56 noble2 nova-compute[324847]: DEBUG nova.share.manila [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Get share access id for share id:\u00279f40e823-3f6d-4125-989f-2d52d93e2f6a\u0027 {{(pid\u003d324847) get_access /opt/stack/nova/nova/share/manila.py:241}}\nAug 19 17:56:56 noble2 nova-compute[324847]: DEBUG nova.compute.share_management [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Waiting policy to be set on share 9f40e823-3f6d-4125-989f-2d52d93e2f6a  {{(pid\u003d324847) _wait_for_access_policy /opt/stack/nova/nova/compute/share_management.py:129}}\nAug 19 17:56:57 noble2 nova-compute[324847]: DEBUG nova.share.manila [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Get share access id for share id:\u00279f40e823-3f6d-4125-989f-2d52d93e2f6a\u0027 {{(pid\u003d324847) get_access /opt/stack/nova/nova/share/manila.py:241}}\nAug 19 17:56:58 noble2 nova-compute[324847]: DEBUG nova.compute.share_management [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Waiting policy to be set on share 9f40e823-3f6d-4125-989f-2d52d93e2f6a  {{(pid\u003d324847) _wait_for_access_policy /opt/stack/nova/nova/compute/share_management.py:129}}\nAug 19 17:56:59 noble2 nova-compute[324847]: DEBUG nova.share.manila [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Get share access id for share id:\u00279f40e823-3f6d-4125-989f-2d52d93e2f6a\u0027 {{(pid\u003d324847) get_access /opt/stack/nova/nova/share/manila.py:241}}\nAug 19 17:56:59 noble2 nova-compute[324847]: DEBUG nova.compute.share_management [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Waiting policy to be set on share 9f40e823-3f6d-4125-989f-2d52d93e2f6a  {{(pid\u003d324847) _wait_for_access_policy /opt/stack/nova/nova/compute/share_management.py:129}}\nAug 19 17:57:00 noble2 nova-compute[324847]: DEBUG nova.share.manila [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Get share access id for share id:\u00279f40e823-3f6d-4125-989f-2d52d93e2f6a\u0027 {{(pid\u003d324847) get_access /opt/stack/nova/nova/share/manila.py:241}}\nAug 19 17:57:00 noble2 nova-compute[324847]: DEBUG nova.compute.share_management [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Waiting policy to be set on share 9f40e823-3f6d-4125-989f-2d52d93e2f6a  {{(pid\u003d324847) _wait_for_access_policy /opt/stack/nova/nova/compute/share_management.py:129}}\nAug 19 17:57:01 noble2 nova-compute[324847]: DEBUG nova.share.manila [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Get share access id for share id:\u00279f40e823-3f6d-4125-989f-2d52d93e2f6a\u0027 {{(pid\u003d324847) get_access /opt/stack/nova/nova/share/manila.py:241}}\nAug 19 17:57:01 noble2 nova-compute[324847]: DEBUG nova.compute.share_management [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Waiting policy to be set on share 9f40e823-3f6d-4125-989f-2d52d93e2f6a  {{(pid\u003d324847) _wait_for_access_policy /opt/stack/nova/nova/compute/share_management.py:129}}\nAug 19 17:57:02 noble2 nova-compute[324847]: DEBUG nova.share.manila [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Get share access id for share id:\u00279f40e823-3f6d-4125-989f-2d52d93e2f6a\u0027 {{(pid\u003d324847) get_access /opt/stack/nova/nova/share/manila.py:241}}\nAug 19 17:57:03 noble2 nova-compute[324847]: DEBUG nova.compute.share_management [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Waiting policy to be set on share 9f40e823-3f6d-4125-989f-2d52d93e2f6a  {{(pid\u003d324847) _wait_for_access_policy /opt/stack/nova/nova/compute/share_management.py:129}}\nAug 19 17:57:04 noble2 nova-compute[324847]: DEBUG nova.share.manila [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Get share access id for share id:\u00279f40e823-3f6d-4125-989f-2d52d93e2f6a\u0027 {{(pid\u003d324847) get_access /opt/stack/nova/nova/share/manila.py:241}}\nAug 19 17:57:04 noble2 nova-compute[324847]: DEBUG nova.compute.share_management [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Waiting policy to be set on share 9f40e823-3f6d-4125-989f-2d52d93e2f6a  {{(pid\u003d324847) _wait_for_access_policy /opt/stack/nova/nova/compute/share_management.py:129}}\nAug 19 17:57:05 noble2 nova-compute[324847]: WARNING nova.compute.share_management [None req-16316672-4ba8-40ce-a8f1-668ca8e1f341 demo demo] Failed to verify Manila access for share 9f40e823-3f6d-4125-989f-2d52d93e2f6a, attempting mount anyway: nova.exception.ShareAccessGrantError: Share access could not be granted to share id 9f40e823-3f6d-4125-989f-2d52d93e2f6a.\n```\n\nIn the m-shr log I saw that my lvm PV was not activated again (because of another reboot I guess) which I assume was maybe the cause for the failure. So I re-activated the loop, scanned and see the PV now, and then restarted m-shr. Then trying the stop/start again, it seems like it isn\u0027t trying to fix the share anymore and going straight for the mount:\n\n```\nAug 19 18:04:04 noble2 nova-compute[324847]: DEBUG nova.share.manila [None req-c424f84a-3ba7-4b28-9996-3566b25afd4c demo demo] Get share access id for share id:\u00279f40e823-3f6d-4125-989f-2d52d93e2f6a\u0027 {{(pid\u003d324847) get_access /opt/stack/nova/nova/share/manila.py:241}}\nAug 19 18:04:05 noble2 nova-compute[324847]: DEBUG nova.share.manila [None req-c424f84a-3ba7-4b28-9996-3566b25afd4c demo demo] Allow host access to share id:\u00279f40e823-3f6d-4125-989f-2d52d93e2f6a\u0027 {{(pid\u003d324847) allow /opt/stack/nova/nova/share/manila.py:284}}\nAug 19 18:04:05 noble2 nova-compute[324847]: WARNING nova.compute.share_management [None req-c424f84a-3ba7-4b28-9996-3566b25afd4c demo demo] Failed to verify Manila access for share 9f40e823-3f6d-4125-989f-2d52d93e2f6a, attempting mount anyway: nova.exception.ShareAccessGrantError: Share access could not be granted to share id 9f40e823-3f6d-4125-989f-2d52d93e2f6a.\n```\n\nI haven\u0027t done any other debugging than that yet. Again, I\u0027m sort of trying to poke at this without debugging actual code like an admin would trying to rescue their stuck environment.","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a2a64f3b528e68e9d0912de095c4551d5abbf79d","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":28,"id":"b907aef8_c32d7863","in_reply_to":"025e45f5_d9b69fbe","updated":"2026-08-19 21:14:54.000000000","message":"Thanks for testing this.. \n\nIf the share backend is unresponsive, the rule should have gone to \"error\" in manila. I wonder what happened there; If you could share your m-shr log with me, i can try and debug why it got stuck in \"queued_to_apply\". \n\nA \"stuck\" access rule can be unstuck by an admin in one of three ways in this sorta situation. Although this could happen to a regular user (instance resizing), they can\u0027t fix issues with this access rule as you observed (the rule is granted by Nova and can\u0027t be manipulated by end-users by design):\n\n- as an admin, you can restart the manila-shr service - the rule will get (re-)-applied (I see you\u0027ve done this, and it didn\u0027t work, so the log may tell us why)\n- as an admin, you can issue \"openstack share service ensure shares \u003cMANILA HOST\u003e\", the rule will get (re)applied\n- as an admin, you can delete the rule from manila, you\u0027ll need \"--unrestrict\" (because it was created by nova, it can\u0027t be deleted by the end user) - the rule will get recreated by the nova code.. \n\nTo make this automatic, we could make the code delete/retry a stuck rule; i\u0027d\u0027ve to think through potential race conditions.","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0d286d4ec394e9a15a46b8154674ddf37d4d00aa","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":28,"id":"d026ef5a_3d9c145b","in_reply_to":"91649449_b7c95c74","updated":"2026-08-19 22:45:25.000000000","message":"Wow, seems quite messy. \n\nI see an unclean shutdown (`Unit process 1594 (manila-share) remains running after unit stopped.`). I wonder if something eventually swallowed the reconciliation. If you still have the rule, could you try restarting again and see if this is reconciled at all?\n\nYou may have found a manila bug otherwise. A freak one at that.. \n\nThe state transition works like this (sorry for the sausage making, just thinking aloud):\n\nAccess rule comes to manila: API sets \"queued_to_apply\"\n(RPC request to manila-share)\nManila asks backend driver to apply the rule: \"applying\"\nManila gets confirmation that the rule was applied: \"active\"\nManila knows something went wrong: \"error\". \n\nI\u0027ve not seen something getting stuck in \"queued_to_apply\".. i think this could happen if there was an rpc hang up, and the manila-share service never got the message.. \n\neven then, a restart of the manila-share service would reconcile this... with the log you shared, i don\u0027t see an attempt to reconcile.. \n\n----\n\n(I\u0027ll try simulating this sort of failure too)","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a2a64f3b528e68e9d0912de095c4551d5abbf79d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":28,"id":"250d7724_9d4a7c96","in_reply_to":"c37b0806_0cb19e70","updated":"2026-08-19 21:14:54.000000000","message":"\u003e Presumably I could delete that rule and then restarting the instance would try again to add it now that m-shr has the LVM group? \n\n\u003e Is this something --unrestrict will bypass (safely?) or some other action I need to do?\n\n++ \"unrestrict\" is fine here.. and nothing else is needed on the manila side, restarting the instance should add a new rule.","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"411bf0f80032730f94227b822efb9dfcdfed2108","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":28,"id":"62f14bd0_ea4a1ad8","in_reply_to":"d026ef5a_3d9c145b","updated":"2026-08-19 23:29:15.000000000","message":"I tried, but couldn\u0027t with this approach:\n\n```\n  1. Stop m-shr\n  2. Create an access rule (API sets queued_to_apply, RPC cast goes to RabbitMQ)\n  3. Purge the RabbitMQ queue so the RPC message is lost\n  4. Start m-shr\n  5. Check if ensure_shares reconciles the stuck rule\n```\n\nManila does its reconciliation. I don\u0027t know if the zombie manila processes are doing something strange in your environment. I\u0027ll create a manila bug for that and investigate.. \n\nIf you spot anything in your restart attempt that I can look at too, let me know please :) \nIf you\u0027d rather run \"openstack share access delete --unrestrict share rule\" i\u0027m okay too.. because we can document that and I can take a task to harden this further.. (i still don\u0027t have bright ideas around concurrency control for deleting/re-adding a rule when potentially two VMs are starting - we have a simple lock, but, i\u0027d need to have a good read-then-set around the critical section)","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c55af2696cdbad39d3d842d434f8fe0d5cfcb26b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":29,"id":"2ba3d19a_fb6f2d9b","updated":"2026-08-21 05:39:31.000000000","message":"Thanks for the re-review, Dan..","commit_id":"7e55c221503d4d79165b8906420f150a497d959c"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"26f1917044967550ddb69d710410bb0c4f5ea8e2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":34,"id":"a0d91543_b971f28f","updated":"2026-08-26 14:00:53.000000000","message":"recheck","commit_id":"a31449c4226a6a04adb9ebd386f84b16f9e6b09b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"9587c0ebf55ca874578be5eb689218ecbe3317b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"b47e9214_57bd5130","updated":"2026-08-26 22:42:32.000000000","message":"The latest patch addresses an issue that @rene.ribaud@gmail.com caught. \n\nI made a change to how CephX user management happens with VirtIOFS in a parent patch as a result of a security hardening bug. I wanted to make sure we got that right so that all other changes (better \"share management\", cold migration, periodic reaping of stale/orphaned rules) considered that. \n\nAs classically, I forgot that I had an assumption here that CephX rules were hardcoded to \"nova\". \n\nI addressed that handling with the latest patch. Without these changes, we were draining access and unmounting actively mounted shares.","commit_id":"13fdabe1199aafdecfcf3c0fc9e723742a1e2cc9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c2c241ac48066a10c5337b570aca028c9c0fb42d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":35,"id":"032e2a4c_9d33c604","updated":"2026-08-27 06:23:50.000000000","message":"recheck\n\nfailure unrelated, \"test_instances_with_cinder_volumes_on_all_compute_nodes\" doesn\u0027t cover teh code paths being touched here","commit_id":"13fdabe1199aafdecfcf3c0fc9e723742a1e2cc9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"cc75b5392cd410beac040686055c2058945dc529","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":41,"id":"954a0883_7bc8e8b5","updated":"2026-09-01 21:16:30.000000000","message":"Ugh, sorry for the patch churn here. Messed up some unit tests, and left some stale references to the old microversion bump.","commit_id":"3420b4d6c9cd50714eba75b36a5f2fd47555cda0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"73557ad2b4b4a7dc2bbc0403d8a9df9e183c4742","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":42,"id":"eccbf2db_cdf6ec18","updated":"2026-09-02 05:27:48.000000000","message":"Thanks @melwittt@gmail.com; addressed your comments in a new PS","commit_id":"b1e37ba34d98063cf9889652ede4621132200b0e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"58dbc146ada879701d03e796d28ce3f8bb1d8ab5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":42,"id":"39cf8391_4091971b","updated":"2026-09-02 17:57:30.000000000","message":"This is failing again, we\u0027ve a CI infra issue resulting in job retries and jobs permafailing with \"error\". sigh; will recheck when results are posted and probably do so a bunch to get this past check. \n\nI\u0027ve ensured all pbkac issues are resolved, and i\u0027ve run a good deal of tests on this myself if this can enhance confidence in reviewing :)","commit_id":"b1e37ba34d98063cf9889652ede4621132200b0e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0c97af079c90b47a312ccb5a098171cea92eb34f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":42,"id":"43642cac_00028fe6","updated":"2026-09-02 19:41:02.000000000","message":"recheck\n\n\n\"error\" jobs","commit_id":"b1e37ba34d98063cf9889652ede4621132200b0e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"55eddfeee70b94c344f558347331886cfe24e7be","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":42,"id":"1a84adf5_d8014743","updated":"2026-09-02 16:24:23.000000000","message":"recheck\n\nPOST_FAILURE in one of the jobs","commit_id":"b1e37ba34d98063cf9889652ede4621132200b0e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"ca55fa4a518b31c9717998e5116f75333f8647e6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":43,"id":"c914b993_81c35551","updated":"2026-09-03 17:52:48.000000000","message":"Updates look good to me","commit_id":"c2f163c0f4cca6542e4484fcdfe1b67d6e2c7c9a"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"69694e72ba34f56efc62722c62b48f4c27249cc6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":44,"id":"88a09c2e_ca94e295","updated":"2026-09-04 17:17:48.000000000","message":"+1 while last patch is still under review","commit_id":"fa1d7431d51749963d39c917f05116da9164e0d6"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"d99208917ca8b6b8b5a63e85a6f9391e237fb3d7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":44,"id":"3d9b535b_15415485","updated":"2026-09-04 22:26:25.000000000","message":"Upgrading to +2/+W as the series has been reviewed and approved","commit_id":"fa1d7431d51749963d39c917f05116da9164e0d6"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"13b1e3a0b77ff79280da27bcb7f763934a040c2a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":44,"id":"33a070f5_0644a419","updated":"2026-09-05 13:54:58.000000000","message":"recheck","commit_id":"fa1d7431d51749963d39c917f05116da9164e0d6"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"b3b0744b695f356efc2656f9cc95b35d130ba543","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":44,"id":"3748cf72_49e2dfba","updated":"2026-09-04 13:52:21.000000000","message":"recheck","commit_id":"fa1d7431d51749963d39c917f05116da9164e0d6"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f6762bfe1d157f83d086a990323b8ec5a453072f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":44,"id":"5cf431cb_240f50c3","updated":"2026-09-04 05:39:58.000000000","message":"recheck\n\nfailure unrelated","commit_id":"fa1d7431d51749963d39c917f05116da9164e0d6"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0a9b043f8272a67d0b75a9acc732d5611371e579","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":44,"id":"502cc5e5_664c6136","updated":"2026-09-05 23:02:49.000000000","message":"recheck \n\nzuul wants to let these one by one","commit_id":"fa1d7431d51749963d39c917f05116da9164e0d6"}],"nova/api/openstack/api_version_request.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"896b9f03c42a643cbc39270d60cdb147e4b03fcb","unresolved":true,"context_lines":[{"line_number":290,"context_line":"              ``PUT /servers/{server_id}`` to unpin or re-pin a server\u0027s"},{"line_number":291,"context_line":"              availability zone."},{"line_number":292,"context_line":"    * 2.105 - Allow cold migration and resize for instances with share"},{"line_number":293,"context_line":"              attachments"},{"line_number":294,"context_line":"\"\"\""},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":35,"id":"4e0152bc_95a185b8","line":293,"updated":"2026-08-28 09:22:25.000000000","message":"as noted on the mailing list adding a api microvrion for the suport of cold migraiton/resize with share attachments is semanticly wrong\n\n\nwe expcilty do not do this because the api contract shoudl not change as a result of supprotign a feature in a sepcicid virt dirver or not\n\nif we ever support share attachments in another virt driver such as ironic intorducing thei api microverison woudl require that we supprot live migration with ironic \n\n\nthis goes direcly agains our existign precended \n\n\nhttps://github.com/openstack/nova-specs/blob/master/specs/2026.1/implemented/vtpm-live-migration.rst#rest-api-impact\nhttps://github.com/openstack/nova-specs/blob/master/specs/2025.1/implemented/migrate-vfio-devices-using-kernel-variant-drivers.rst#rest-api-impact\nhttps://github.com/openstack/nova-specs/blob/master/specs/2024.1/implemented/libvirt-mdev-live-migrate.rst#rest-api-impact\n\n\nand was an error in the spec that should have been caght during spec review\n\n\nthis should be removed before this proceeds","commit_id":"13fdabe1199aafdecfcf3c0fc9e723742a1e2cc9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c5ebbfdacec47ea99d165ce39c9a65b3ab674595","unresolved":true,"context_lines":[{"line_number":290,"context_line":"              ``PUT /servers/{server_id}`` to unpin or re-pin a server\u0027s"},{"line_number":291,"context_line":"              availability zone."},{"line_number":292,"context_line":"    * 2.105 - Allow cold migration and resize for instances with share"},{"line_number":293,"context_line":"              attachments"},{"line_number":294,"context_line":"\"\"\""},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":35,"id":"8698014e_e9a8de75","line":293,"in_reply_to":"07995846_28a37f2c","updated":"2026-09-01 06:30:56.000000000","message":"Hey Sean, Dan:\n\n\u003e and was an error in the spec that should have been caght during spec review\n\nActually, my earlier proposal mirrored your read on whether this needed a micro-version bump. However, a discussion at the Nova PTG [1] led me to bump the version because we were specifically looking for answering the question:\n\nI\u0027m writing automation to resize (or cold-migrate) against two clouds. How can I tell if the action is supported in one vs the other?\n\nThis is still a head-scratcher for me, just as Dan\u0027s examples point out too. I understand if the Nova team is driving towards some consistency here :) I\u0027ll update this to drop the microversion change\n\n[1] https://etherpad.opendev.org/p/nova-2026.2-ptg#L317","commit_id":"13fdabe1199aafdecfcf3c0fc9e723742a1e2cc9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"57e9466dab459ab6d271232725717babd82caf28","unresolved":true,"context_lines":[{"line_number":290,"context_line":"              ``PUT /servers/{server_id}`` to unpin or re-pin a server\u0027s"},{"line_number":291,"context_line":"              availability zone."},{"line_number":292,"context_line":"    * 2.105 - Allow cold migration and resize for instances with share"},{"line_number":293,"context_line":"              attachments"},{"line_number":294,"context_line":"\"\"\""},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":35,"id":"07995846_28a37f2c","line":293,"in_reply_to":"4e0152bc_95a185b8","updated":"2026-08-31 15:11:05.000000000","message":"I think Sean\u0027s assessment is technically correct here although I don\u0027t think it\u0027s a huge problem. This is \"a thing that could never work before, which can work now.\" It\u0027s not related to one virt driver implementing a thing that works elsewhere and it is also a little less clear (to me at least) than things like vtpm live migration as this was a big new feature we added just a few microversions ago with a strict API rejection which is now allowed. We do have other microversions for things like \"allowing operation X in state Y\" (2.20 for example) which is similar. Basically, if the API user doesn\u0027t know if the deployment is new enough to support a thing, they don\u0027t know whether asking for it is futile or not. Since the share stuff was _so_ recent and since it starts working once computes are suitably upgraded, it could be confusing to a user to have no signaling.\n\nThat said, especially given FFE, it should be easy to just drop the microversion stuff here and move on and I think that\u0027s more right than not.","commit_id":"13fdabe1199aafdecfcf3c0fc9e723742a1e2cc9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"57f30911d4f04e91cd3c3ad826bd04761807ff7f","unresolved":false,"context_lines":[{"line_number":290,"context_line":"              ``PUT /servers/{server_id}`` to unpin or re-pin a server\u0027s"},{"line_number":291,"context_line":"              availability zone."},{"line_number":292,"context_line":"    * 2.105 - Allow cold migration and resize for instances with share"},{"line_number":293,"context_line":"              attachments"},{"line_number":294,"context_line":"\"\"\""},{"line_number":295,"context_line":""},{"line_number":296,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":35,"id":"3e01b8f9_b33a08e5","line":293,"in_reply_to":"8698014e_e9a8de75","updated":"2026-09-01 08:07:26.000000000","message":"Marked as resolved.\n\nDropped the microversion bump.","commit_id":"13fdabe1199aafdecfcf3c0fc9e723742a1e2cc9"}],"nova/compute/api.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d49c55c44979756af80d520ca842b33e24f4ec98","unresolved":true,"context_lines":[{"line_number":4312,"context_line":"                    message\u003d\"Cold migration and resize with shares \""},{"line_number":4313,"context_line":"                            \"requires microversion 2.105 or later.\")"},{"line_number":4314,"context_line":"            if min_comp_ver \u003c MIN_COMPUTE_COLD_MIGRATE_WITH_SHARES:"},{"line_number":4315,"context_line":"                raise exception.ForbiddenWithShare("},{"line_number":4316,"context_line":"                    message\u003d\"Cold migration and resize with shares \""},{"line_number":4317,"context_line":"                            \"requires all compute services to be at \""},{"line_number":4318,"context_line":"                            \"service version %d or later.\""}],"source_content_type":"text/x-python","patch_set":28,"id":"d394f6bb_c54b9e56","line":4315,"updated":"2026-08-20 16:52:50.000000000","message":"This case appears uncovered in the tests","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c55af2696cdbad39d3d842d434f8fe0d5cfcb26b","unresolved":false,"context_lines":[{"line_number":4312,"context_line":"                    message\u003d\"Cold migration and resize with shares \""},{"line_number":4313,"context_line":"                            \"requires microversion 2.105 or later.\")"},{"line_number":4314,"context_line":"            if min_comp_ver \u003c MIN_COMPUTE_COLD_MIGRATE_WITH_SHARES:"},{"line_number":4315,"context_line":"                raise exception.ForbiddenWithShare("},{"line_number":4316,"context_line":"                    message\u003d\"Cold migration and resize with shares \""},{"line_number":4317,"context_line":"                            \"requires all compute services to be at \""},{"line_number":4318,"context_line":"                            \"service version %d or later.\""}],"source_content_type":"text/x-python","patch_set":28,"id":"bb78a415_55eafe20","line":4315,"in_reply_to":"a87b118a_ac6f44dd","updated":"2026-08-21 05:39:31.000000000","message":"Done","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"6162eb4aa3272db7d3147246466c12882fbc1473","unresolved":true,"context_lines":[{"line_number":4312,"context_line":"                    message\u003d\"Cold migration and resize with shares \""},{"line_number":4313,"context_line":"                            \"requires microversion 2.105 or later.\")"},{"line_number":4314,"context_line":"            if min_comp_ver \u003c MIN_COMPUTE_COLD_MIGRATE_WITH_SHARES:"},{"line_number":4315,"context_line":"                raise exception.ForbiddenWithShare("},{"line_number":4316,"context_line":"                    message\u003d\"Cold migration and resize with shares \""},{"line_number":4317,"context_line":"                            \"requires all compute services to be at \""},{"line_number":4318,"context_line":"                            \"service version %d or later.\""}],"source_content_type":"text/x-python","patch_set":28,"id":"a87b118a_ac6f44dd","line":4315,"in_reply_to":"d394f6bb_c54b9e56","updated":"2026-08-21 05:35:56.000000000","message":"++ Adding tests","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"6943a21b04333f6350556fa5e9cf17927bc59ba5","unresolved":true,"context_lines":[{"line_number":4311,"context_line":"                    message\u003d\"Cold migration and resize with shares \""},{"line_number":4312,"context_line":"                            \"requires all compute services to be at \""},{"line_number":4313,"context_line":"                            \"service version %d or later.\""},{"line_number":4314,"context_line":"                            % MIN_COMPUTE_COLD_MIGRATE_WITH_SHARES)"},{"line_number":4315,"context_line":""},{"line_number":4316,"context_line":"        allow_cross_cell_resize \u003d self._allow_cross_cell_resize("},{"line_number":4317,"context_line":"            context, instance, min_comp_ver)"}],"source_content_type":"text/x-python","patch_set":41,"id":"a7a14fc0_6b4c64a9","line":4314,"updated":"2026-09-02 03:04:49.000000000","message":"I notice you might want to wrap the message in `_()` to make it be translated.","commit_id":"3420b4d6c9cd50714eba75b36a5f2fd47555cda0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"73557ad2b4b4a7dc2bbc0403d8a9df9e183c4742","unresolved":false,"context_lines":[{"line_number":4311,"context_line":"                    message\u003d\"Cold migration and resize with shares \""},{"line_number":4312,"context_line":"                            \"requires all compute services to be at \""},{"line_number":4313,"context_line":"                            \"service version %d or later.\""},{"line_number":4314,"context_line":"                            % MIN_COMPUTE_COLD_MIGRATE_WITH_SHARES)"},{"line_number":4315,"context_line":""},{"line_number":4316,"context_line":"        allow_cross_cell_resize \u003d self._allow_cross_cell_resize("},{"line_number":4317,"context_line":"            context, instance, min_comp_ver)"}],"source_content_type":"text/x-python","patch_set":41,"id":"8a03fa34_73267b25","line":4314,"in_reply_to":"a7a14fc0_6b4c64a9","updated":"2026-09-02 05:27:48.000000000","message":"Done","commit_id":"3420b4d6c9cd50714eba75b36a5f2fd47555cda0"}],"nova/compute/manager.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a7839669171309ca945eafc1accd821491f31925","unresolved":true,"context_lines":[{"line_number":4705,"context_line":"                      instance\u003dinstance)"},{"line_number":4706,"context_line":""},{"line_number":4707,"context_line":"    def _grant_share_access(self, context, share_mapping):"},{"line_number":4708,"context_line":"        self.share_manager.grant_access(context, share_mapping)"},{"line_number":4709,"context_line":""},{"line_number":4710,"context_line":"    @messaging.expected_exceptions(NotImplementedError)"},{"line_number":4711,"context_line":"    @wrap_exception()"}],"source_content_type":"text/x-python","patch_set":20,"id":"8b7189c7_f8405163","line":4708,"updated":"2026-08-06 15:22:37.000000000","message":"Same comment as before - I don\u0027t see the value in the indirection here...","commit_id":"c6a327497793c31a80859cd5686c73d3a4bf7f66"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c19d473c358e7cf66c8a9f73bdb57215c3c0f4d2","unresolved":false,"context_lines":[{"line_number":4705,"context_line":"                      instance\u003dinstance)"},{"line_number":4706,"context_line":""},{"line_number":4707,"context_line":"    def _grant_share_access(self, context, share_mapping):"},{"line_number":4708,"context_line":"        self.share_manager.grant_access(context, share_mapping)"},{"line_number":4709,"context_line":""},{"line_number":4710,"context_line":"    @messaging.expected_exceptions(NotImplementedError)"},{"line_number":4711,"context_line":"    @wrap_exception()"}],"source_content_type":"text/x-python","patch_set":20,"id":"23d34e9e_0f690b0f","line":4708,"in_reply_to":"8b7189c7_f8405163","updated":"2026-08-07 06:23:03.000000000","message":"yeah, true","commit_id":"c6a327497793c31a80859cd5686c73d3a4bf7f66"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a7839669171309ca945eafc1accd821491f31925","unresolved":true,"context_lines":[{"line_number":5089,"context_line":"            network_info, pci_mapping)"},{"line_number":5090,"context_line":""},{"line_number":5091,"context_line":"        # Unmount shares and revoke Manila access on source host."},{"line_number":5092,"context_line":"        # This must happen before confirm_migration destroys the domain."},{"line_number":5093,"context_line":"        # On same-host resize, shares are still needed by the instance."},{"line_number":5094,"context_line":"        same_host \u003d ("},{"line_number":5095,"context_line":"            migration is not None and"}],"source_content_type":"text/x-python","patch_set":20,"id":"ce8555c4_d8b51135","line":5092,"updated":"2026-08-06 15:22:37.000000000","message":"Hmm, why is that? I guess I would expect it would be better to finish cleaning up all the uses of it before we `umount_and_revoke`...","commit_id":"c6a327497793c31a80859cd5686c73d3a4bf7f66"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c19d473c358e7cf66c8a9f73bdb57215c3c0f4d2","unresolved":false,"context_lines":[{"line_number":5089,"context_line":"            network_info, pci_mapping)"},{"line_number":5090,"context_line":""},{"line_number":5091,"context_line":"        # Unmount shares and revoke Manila access on source host."},{"line_number":5092,"context_line":"        # This must happen before confirm_migration destroys the domain."},{"line_number":5093,"context_line":"        # On same-host resize, shares are still needed by the instance."},{"line_number":5094,"context_line":"        same_host \u003d ("},{"line_number":5095,"context_line":"            migration is not None and"}],"source_content_type":"text/x-python","patch_set":20,"id":"8ac445a7_f0cea4ef","line":5092,"in_reply_to":"ce8555c4_d8b51135","updated":"2026-08-07 06:23:03.000000000","message":"confirm_migration calls _cleanup_resize() in libvirt, which only removes disk files from the snapshot; The domain was already destroyed in _finish_resize().... So confirm_migration doesn\u0027t interact with virtiofs mounts...  and the ordering is safe in either direction. I moved it after for consistency with _revert_resize","commit_id":"c6a327497793c31a80859cd5686c73d3a4bf7f66"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a7839669171309ca945eafc1accd821491f31925","unresolved":true,"context_lines":[{"line_number":5658,"context_line":"                                block_device_info, destroy_disks)"},{"line_number":5659,"context_line":""},{"line_number":5660,"context_line":"            # Unmount shares and revoke Manila access on destination."},{"line_number":5661,"context_line":"            # On same-host resize, shares are still needed by the source."},{"line_number":5662,"context_line":"            same_host \u003d ("},{"line_number":5663,"context_line":"                migration.source_compute \u003d\u003d migration.dest_compute)"},{"line_number":5664,"context_line":"            if not same_host:"}],"source_content_type":"text/x-python","patch_set":20,"id":"ca6df88a_190b5138","line":5661,"updated":"2026-08-06 15:22:37.000000000","message":"But the opposite in this case?","commit_id":"c6a327497793c31a80859cd5686c73d3a4bf7f66"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c19d473c358e7cf66c8a9f73bdb57215c3c0f4d2","unresolved":false,"context_lines":[{"line_number":5658,"context_line":"                                block_device_info, destroy_disks)"},{"line_number":5659,"context_line":""},{"line_number":5660,"context_line":"            # Unmount shares and revoke Manila access on destination."},{"line_number":5661,"context_line":"            # On same-host resize, shares are still needed by the source."},{"line_number":5662,"context_line":"            same_host \u003d ("},{"line_number":5663,"context_line":"                migration.source_compute \u003d\u003d migration.dest_compute)"},{"line_number":5664,"context_line":"            if not same_host:"}],"source_content_type":"text/x-python","patch_set":20,"id":"ae4325b4_dc23895b","line":5661,"in_reply_to":"ca6df88a_190b5138","updated":"2026-08-07 06:23:03.000000000","message":"Acknowledged","commit_id":"c6a327497793c31a80859cd5686c73d3a4bf7f66"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"a7839669171309ca945eafc1accd821491f31925","unresolved":true,"context_lines":[{"line_number":5666,"context_line":"                    context, instance, check_status\u003dFalse)"},{"line_number":5667,"context_line":"                self.share_manager.umount_and_revoke_all("},{"line_number":5668,"context_line":"                    context, instance, share_info, \"revert resize\")"},{"line_number":5669,"context_line":""},{"line_number":5670,"context_line":"            self._terminate_volume_connections(context, instance, bdms)"},{"line_number":5671,"context_line":""},{"line_number":5672,"context_line":"            # Free up the new_flavor usage from the resource tracker for this"}],"source_content_type":"text/x-python","patch_set":20,"id":"5f3e55db_de0e81b1","line":5669,"updated":"2026-08-06 15:22:37.000000000","message":"Looks like this is basically the same logic - would it not be better to wrap this up in a `share_manager.cleanup_host_after_migration(..., reason\u003d)` helper?\n\nTBH, I can\u0027t remember when `migration` could be None, which you\u0027re checking for in the confirm case but not here. That may be a problem (although you can jog my memory to prove otherwise) but aside from that I think sharing the logic and having it be defensive in either case won\u0027t hurt.","commit_id":"c6a327497793c31a80859cd5686c73d3a4bf7f66"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c19d473c358e7cf66c8a9f73bdb57215c3c0f4d2","unresolved":false,"context_lines":[{"line_number":5666,"context_line":"                    context, instance, check_status\u003dFalse)"},{"line_number":5667,"context_line":"                self.share_manager.umount_and_revoke_all("},{"line_number":5668,"context_line":"                    context, instance, share_info, \"revert resize\")"},{"line_number":5669,"context_line":""},{"line_number":5670,"context_line":"            self._terminate_volume_connections(context, instance, bdms)"},{"line_number":5671,"context_line":""},{"line_number":5672,"context_line":"            # Free up the new_flavor usage from the resource tracker for this"}],"source_content_type":"text/x-python","patch_set":20,"id":"af4be8cc_bec6fabe","line":5669,"in_reply_to":"5f3e55db_de0e81b1","updated":"2026-08-07 06:23:03.000000000","message":"yeah, i\u0027ve now extracted the logic into the ShareManager so i could re-use it\n\nThe new helper handles migration is None defensively for confirm/revert.. you were right that the revert case wasn\u0027t guarding for it.","commit_id":"c6a327497793c31a80859cd5686c73d3a4bf7f66"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"94b25be98494ae5bce9e86471ea73839795ab2de","unresolved":true,"context_lines":[{"line_number":6564,"context_line":"                for share_mapping in share_info:"},{"line_number":6565,"context_line":"                    self.share_manager.grant_access(context, share_mapping)"},{"line_number":6566,"context_line":"                    granted_shares.append(share_mapping)"},{"line_number":6567,"context_line":"                    self.share_manager.mount(context, instance, share_mapping)"},{"line_number":6568,"context_line":"                    mounted_shares.append(share_mapping)"},{"line_number":6569,"context_line":"            except Exception:"},{"line_number":6570,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":22,"id":"131ef6ab_a7bfe2aa","line":6567,"range":{"start_line":6567,"start_character":0,"end_line":6567,"end_character":78},"updated":"2026-08-11 07:40:16.000000000","message":"@dms@danplanet.com:\n\nIn your testing, grant_access failed because nova-cpu didn\u0027t have [manila] credentials to talk to Manila. \n\nThis resulted in the share-mapping status remaining \"inactive\" and the instance transitioning to \"error\".\n\nAt this stage, if you had fixed the configuration and reverted/re-attempted cold migration, it\u0027d\u0027ve cleared past this.\n\nBut, you did what i\u0027d\u0027ve done too; because you knew the instance had already made it to the destination, you reset its status and attempted to start. Doing this triggered the host-side mount, which failed and put the share attachment status to \"error\".\n\n\nThere was no way to recover from this state without database surgery.\n\nWhich i think is a design flaw, on two fronts:\n\nFirst, mount() and umount() in the share manager currently poison both the share mapping and the instance to error on\nfailure. This is too aggressive... during migration rollback, the shares are still active on the source, so poisoning them to \"error\" is wrong. i think mount/umount should just raise and let the caller decide what state to set.\n\nSecond, even with that fix, there are legitimate cases where a share ends up in error (storage goes away, bad config on the host, etc) and there\u0027s no way to recover. \n\n\nWDYT of introducing an action on the share_attachments resource to reset the attachment status back to \"inactive\"? Inactive meaning \"attached.. but not mounted\" — ready to be retried on the next start.\n\nWith it, admins can rectify their issues (configuration, network connectivity etc) out of band, reset the share attachment status, and then just start the instance. The existing instance reset-state already handles the instance side of things.\n\nThis\u0027d also work for hot attach failures down the road.","commit_id":"b4d68ed721a4c2d9b4338e72ca7fe0324b8be5d0"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"3f5b1d518c6619a2c25a57ecb3051b58e1cb20a6","unresolved":true,"context_lines":[{"line_number":6564,"context_line":"                for share_mapping in share_info:"},{"line_number":6565,"context_line":"                    self.share_manager.grant_access(context, share_mapping)"},{"line_number":6566,"context_line":"                    granted_shares.append(share_mapping)"},{"line_number":6567,"context_line":"                    self.share_manager.mount(context, instance, share_mapping)"},{"line_number":6568,"context_line":"                    mounted_shares.append(share_mapping)"},{"line_number":6569,"context_line":"            except Exception:"},{"line_number":6570,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":22,"id":"789cfbf6_60f98f6c","line":6567,"range":{"start_line":6567,"start_character":0,"end_line":6567,"end_character":78},"in_reply_to":"131ef6ab_a7bfe2aa","updated":"2026-08-11 15:32:26.000000000","message":"\u003e At this stage, if you had fixed the configuration and reverted/re-attempted cold migration, it\u0027d\u0027ve cleared past this.\n\nNot sure what you mean here.. if the instance is in error state you can\u0027t migrate it...something has to reset it to a reasonable state. Usually the way a user does that is stopping it (which didn\u0027t work for me, but I didn\u0027t look to see why).\n\n\u003e But, you did what i\u0027d\u0027ve done too; because you knew the instance had already made it to the destination, you reset its status and attempted to start. Doing this triggered the host-side mount, which failed and put the share attachment status to \"error\".\n\nI did that after stop didn\u0027t work.\n\n\u003e There was no way to recover from this state without database surgery.\n\u003e \n\u003e Which i think is a design flaw, on two fronts:\n\nDefinitely :)\n\n\u003e First, mount() and umount() in the share manager currently poison both the share mapping and the instance to error on\n\u003e failure. This is too aggressive... during migration rollback, the shares are still active on the source, so poisoning them to \"error\" is wrong. i think mount/umount should just raise and let the caller decide what state to set.\n\u003e \n\u003e Second, even with that fix, there are legitimate cases where a share ends up in error (storage goes away, bad config on the host, etc) and there\u0027s no way to recover. \n\u003e \n\u003e \n\u003e WDYT of introducing an action on the share_attachments resource to reset the attachment status back to \"inactive\"? Inactive meaning \"attached.. but not mounted\" — ready to be retried on the next start.\n\n\"inactive\" puts it back to the status it would be if the instance was powered off and/or before it was powered on the first time after (cold) attach right? As long as I can stop/restart the instance in place after such a failure, that makes sense to me.\n\n\u003e With it, admins can rectify their issues (configuration, network connectivity etc) out of band, reset the share attachment status, and then just start the instance. The existing instance reset-state already handles the instance side of things.\n\nThis needs to be resettable for transient failures experienced by users during resize. I don\u0027t understand the \"reset the share attachment status\" part of this. Didn\u0027t you say above it\u0027d go back to inactive state? Why the need for an admin to reset the share attachment?","commit_id":"b4d68ed721a4c2d9b4338e72ca7fe0324b8be5d0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d172eaf0fe0f42149c282e9c1ac7c39bff25cb77","unresolved":true,"context_lines":[{"line_number":6564,"context_line":"                for share_mapping in share_info:"},{"line_number":6565,"context_line":"                    self.share_manager.grant_access(context, share_mapping)"},{"line_number":6566,"context_line":"                    granted_shares.append(share_mapping)"},{"line_number":6567,"context_line":"                    self.share_manager.mount(context, instance, share_mapping)"},{"line_number":6568,"context_line":"                    mounted_shares.append(share_mapping)"},{"line_number":6569,"context_line":"            except Exception:"},{"line_number":6570,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":22,"id":"54a85c99_39c063cf","line":6567,"range":{"start_line":6567,"start_character":0,"end_line":6567,"end_character":78},"in_reply_to":"4efe8e73_b62d4487","updated":"2026-08-12 18:12:18.000000000","message":"Hey Dan, \n\nI\u0027ve dropped one more thing in this workflow. When we run into issues starting the VM \u0026 mounting shares to do so, instead of revoking manila\u0027s access rules, we\u0027ll leave them in-place. This should allow administrator/user intervention when folks fix any underlying problems and attempt one of these:\n\n- reset-state to \"ACTIVE\", stop and start the VM\n- or just hard reboot the VM","commit_id":"b4d68ed721a4c2d9b4338e72ca7fe0324b8be5d0"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b0cba20ac3f1ad7ff6181d7563e946a97e794e4d","unresolved":true,"context_lines":[{"line_number":6564,"context_line":"                for share_mapping in share_info:"},{"line_number":6565,"context_line":"                    self.share_manager.grant_access(context, share_mapping)"},{"line_number":6566,"context_line":"                    granted_shares.append(share_mapping)"},{"line_number":6567,"context_line":"                    self.share_manager.mount(context, instance, share_mapping)"},{"line_number":6568,"context_line":"                    mounted_shares.append(share_mapping)"},{"line_number":6569,"context_line":"            except Exception:"},{"line_number":6570,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":22,"id":"f21b481e_01fcccff","line":6567,"range":{"start_line":6567,"start_character":0,"end_line":6567,"end_character":78},"in_reply_to":"54a85c99_39c063cf","updated":"2026-08-14 13:54:27.000000000","message":"Yes, I think this makes sense - leave things in place until the revert or confirm happens.","commit_id":"b4d68ed721a4c2d9b4338e72ca7fe0324b8be5d0"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"af57215634231c1b2577d6ff91849aa3ddcec69f","unresolved":false,"context_lines":[{"line_number":6564,"context_line":"                for share_mapping in share_info:"},{"line_number":6565,"context_line":"                    self.share_manager.grant_access(context, share_mapping)"},{"line_number":6566,"context_line":"                    granted_shares.append(share_mapping)"},{"line_number":6567,"context_line":"                    self.share_manager.mount(context, instance, share_mapping)"},{"line_number":6568,"context_line":"                    mounted_shares.append(share_mapping)"},{"line_number":6569,"context_line":"            except Exception:"},{"line_number":6570,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":22,"id":"6b29fab2_f4cab818","line":6567,"range":{"start_line":6567,"start_character":0,"end_line":6567,"end_character":78},"in_reply_to":"6e535f8d_b715f151","updated":"2026-08-20 16:40:19.000000000","message":"Done","commit_id":"b4d68ed721a4c2d9b4338e72ca7fe0324b8be5d0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"4953bf54a2c91ef44b87186b727ae04bad907804","unresolved":true,"context_lines":[{"line_number":6564,"context_line":"                for share_mapping in share_info:"},{"line_number":6565,"context_line":"                    self.share_manager.grant_access(context, share_mapping)"},{"line_number":6566,"context_line":"                    granted_shares.append(share_mapping)"},{"line_number":6567,"context_line":"                    self.share_manager.mount(context, instance, share_mapping)"},{"line_number":6568,"context_line":"                    mounted_shares.append(share_mapping)"},{"line_number":6569,"context_line":"            except Exception:"},{"line_number":6570,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":22,"id":"4efe8e73_b62d4487","line":6567,"range":{"start_line":6567,"start_character":0,"end_line":6567,"end_character":78},"in_reply_to":"789cfbf6_60f98f6c","updated":"2026-08-12 06:35:36.000000000","message":"\u003e \"inactive\" puts it back to the status it would be if the instance was powered off and/or before it was powered on the first time after (cold) attach right? As long as I can stop/restart the instance in place after such a failure, that makes sense to me.\n\nYes; that\u0027s been the design change. It was weaved into the prior commit since, this failure can happen in other circumstances as well, not just cold migration.. \nfor example, if someone stopped and started their VM, and in the middle, the shares were somehow affected out of band... So \"inactive\" is the right state to leave things in for an easier rectification... \n\nIn essence, share mapping stays INACTIVE through mount failures. When the user or admin fixes the underlying issue (e.g., network, config, something broken on manila) and starts the instance again, mount is retried from INACTIVE. \n\ni\u0027ve shelved the idea of needing an admin api to reset share states. This fix made things simpler. \n\nI tested this e2e by reproducing the scenario that you hit this problem with; would appreciate you trying this again, post my fix.","commit_id":"b4d68ed721a4c2d9b4338e72ca7fe0324b8be5d0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"26687b5b69c09a428dff1be7ee4fb189e84b76d2","unresolved":true,"context_lines":[{"line_number":6564,"context_line":"                for share_mapping in share_info:"},{"line_number":6565,"context_line":"                    self.share_manager.grant_access(context, share_mapping)"},{"line_number":6566,"context_line":"                    granted_shares.append(share_mapping)"},{"line_number":6567,"context_line":"                    self.share_manager.mount(context, instance, share_mapping)"},{"line_number":6568,"context_line":"                    mounted_shares.append(share_mapping)"},{"line_number":6569,"context_line":"            except Exception:"},{"line_number":6570,"context_line":"                with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":22,"id":"6e535f8d_b715f151","line":6567,"range":{"start_line":6567,"start_character":0,"end_line":6567,"end_character":78},"in_reply_to":"f21b481e_01fcccff","updated":"2026-08-14 19:02:58.000000000","message":"Yes. \"cleanup_shares_after_migration\" runs on the destination during revert/confirm.. and it does the revert to undo access rules specific to the destination in case of revert, and specific to the source in case of confirm.","commit_id":"b4d68ed721a4c2d9b4338e72ca7fe0324b8be5d0"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"b0cba20ac3f1ad7ff6181d7563e946a97e794e4d","unresolved":true,"context_lines":[{"line_number":5655,"context_line":"                                block_device_info, destroy_disks)"},{"line_number":5656,"context_line":""},{"line_number":5657,"context_line":"            self.share_manager.cleanup_shares_after_migration("},{"line_number":5658,"context_line":"                context, instance, migration, \"revert resize\")"},{"line_number":5659,"context_line":""},{"line_number":5660,"context_line":"            self._terminate_volume_connections(context, instance, bdms)"},{"line_number":5661,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"b2927f0e_80c106ef","line":5658,"updated":"2026-08-14 13:54:27.000000000","message":"Okay, so we were already doing this on the revert path. This happens on the destination, so it\u0027s going to unmount/revoke for \"self\" in this case, leaving the source\u0027s grant in place, yes?","commit_id":"9645e79dafe4ad08357c448225d1922ea4055a1d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"ec424669d80008d4bd6807a3318730a1233e6963","unresolved":false,"context_lines":[{"line_number":5655,"context_line":"                                block_device_info, destroy_disks)"},{"line_number":5656,"context_line":""},{"line_number":5657,"context_line":"            self.share_manager.cleanup_shares_after_migration("},{"line_number":5658,"context_line":"                context, instance, migration, \"revert resize\")"},{"line_number":5659,"context_line":""},{"line_number":5660,"context_line":"            self._terminate_volume_connections(context, instance, bdms)"},{"line_number":5661,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"8d230793_d1dcc053","line":5658,"in_reply_to":"b2927f0e_80c106ef","updated":"2026-08-19 23:21:50.000000000","message":"Yes! (high latency on this comment)","commit_id":"9645e79dafe4ad08357c448225d1922ea4055a1d"},{"author":{"_account_id":28329,"name":"yangjianfeng","display_name":"JeffYang","email":"yjf1970231893@gmail.com","username":"yangjianfeng"},"change_message_id":"158d03bed326c80a0db9750d1760076fce98b829","unresolved":true,"context_lines":[{"line_number":5092,"context_line":"                       get_pci_mapping_for_migration(True))"},{"line_number":5093,"context_line":"        network_info \u003d self._get_updated_nw_info_with_pci_mapping("},{"line_number":5094,"context_line":"            network_info, pci_mapping)"},{"line_number":5095,"context_line":""},{"line_number":5096,"context_line":"        # Unmount shares and revoke Manila access on source host."},{"line_number":5097,"context_line":"        self.driver.confirm_migration(context, migration, instance,"},{"line_number":5098,"context_line":"                                      network_info)"},{"line_number":5099,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"57c56177_c56bd987","line":5096,"range":{"start_line":5095,"start_character":0,"end_line":5096,"end_character":65},"updated":"2026-08-18 01:37:31.000000000","message":"It looks like this comment is associated with the wrong line. Should it be moved to line 5100?","commit_id":"62642b07bfff6927c61189ff7b30e079cfeab68a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"405b52713ac2d8e5d264e3501488cd980dbba7c4","unresolved":false,"context_lines":[{"line_number":5092,"context_line":"                       get_pci_mapping_for_migration(True))"},{"line_number":5093,"context_line":"        network_info \u003d self._get_updated_nw_info_with_pci_mapping("},{"line_number":5094,"context_line":"            network_info, pci_mapping)"},{"line_number":5095,"context_line":""},{"line_number":5096,"context_line":"        # Unmount shares and revoke Manila access on source host."},{"line_number":5097,"context_line":"        self.driver.confirm_migration(context, migration, instance,"},{"line_number":5098,"context_line":"                                      network_info)"},{"line_number":5099,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"dbb270d6_3d5aaca5","line":5096,"range":{"start_line":5095,"start_character":0,"end_line":5096,"end_character":65},"in_reply_to":"57c56177_c56bd987","updated":"2026-08-18 08:22:29.000000000","message":"thanks, done","commit_id":"62642b07bfff6927c61189ff7b30e079cfeab68a"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"af57215634231c1b2577d6ff91849aa3ddcec69f","unresolved":true,"context_lines":[{"line_number":5098,"context_line":""},{"line_number":5099,"context_line":"        # Unmount shares and revoke Manila access on source host."},{"line_number":5100,"context_line":"        self.share_manager.cleanup_shares_after_migration("},{"line_number":5101,"context_line":"            context, instance, migration, \"confirm resize\")"},{"line_number":5102,"context_line":""},{"line_number":5103,"context_line":"        # Free up the old_flavor usage from the resource tracker for this host."},{"line_number":5104,"context_line":"        self.rt.drop_move_claim_at_source(context, instance, migration)"}],"source_content_type":"text/x-python","patch_set":28,"id":"a618578f_c4bed5fd","line":5101,"updated":"2026-08-20 16:40:19.000000000","message":"If this fails to do its thing, we don\u0027t block the confirm (or revert). I think that\u0027s the best plan, despite the small security exposure it opens up.\n\nHowever, in my testing (stopped m-api before resize confirm/revert) I don\u0027t think we\u0027ll ever reconcile that after the failure unless we migrate back to the original host. I don\u0027t have a three-node setup to test with, but I don\u0027t think there\u0027s any way we would.\n\nI\u0027m thinking we probably need a step at host init time to check for any stale access rules/mounts and clean them up, right?","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"fe46643fcb1725c6e84785bc3dde021a8de8971b","unresolved":true,"context_lines":[{"line_number":5098,"context_line":""},{"line_number":5099,"context_line":"        # Unmount shares and revoke Manila access on source host."},{"line_number":5100,"context_line":"        self.share_manager.cleanup_shares_after_migration("},{"line_number":5101,"context_line":"            context, instance, migration, \"confirm resize\")"},{"line_number":5102,"context_line":""},{"line_number":5103,"context_line":"        # Free up the old_flavor usage from the resource tracker for this host."},{"line_number":5104,"context_line":"        self.rt.drop_move_claim_at_source(context, instance, migration)"}],"source_content_type":"text/x-python","patch_set":28,"id":"e2a8cc36_c818dc45","line":5101,"in_reply_to":"0bfdf97b_65cedb8e","updated":"2026-08-21 15:20:30.000000000","message":"I don\u0027t think we should be landing code we know is broken on the promise of being able to keep implementing to fill the gaps as bugs. That\u0027s kinda why we\u0027re here now I think, having landed this feature without some of the mandatory supported features like cold migration.\n\nThat said, I think we have time still and would think a FFE would be appropriate for landing that if necessary. Since it\u0027s simple to repro and test such a periodic, can you just tack on a follow-up patch to this series to implement that cleanup? We have a week left before FFE even which I would think would be enough time.","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"57f30911d4f04e91cd3c3ad826bd04761807ff7f","unresolved":false,"context_lines":[{"line_number":5098,"context_line":""},{"line_number":5099,"context_line":"        # Unmount shares and revoke Manila access on source host."},{"line_number":5100,"context_line":"        self.share_manager.cleanup_shares_after_migration("},{"line_number":5101,"context_line":"            context, instance, migration, \"confirm resize\")"},{"line_number":5102,"context_line":""},{"line_number":5103,"context_line":"        # Free up the old_flavor usage from the resource tracker for this host."},{"line_number":5104,"context_line":"        self.rt.drop_move_claim_at_source(context, instance, migration)"}],"source_content_type":"text/x-python","patch_set":28,"id":"20b13814_d3fb1162","line":5101,"in_reply_to":"2f966eea_00089d77","updated":"2026-09-01 08:07:26.000000000","message":"reconciliation of share access rules is in a follow up change: https://review.opendev.org/c/openstack/nova/+/1001916/","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"962ddd3d41e825df1035980be4eef13cfd1a941c","unresolved":true,"context_lines":[{"line_number":5098,"context_line":""},{"line_number":5099,"context_line":"        # Unmount shares and revoke Manila access on source host."},{"line_number":5100,"context_line":"        self.share_manager.cleanup_shares_after_migration("},{"line_number":5101,"context_line":"            context, instance, migration, \"confirm resize\")"},{"line_number":5102,"context_line":""},{"line_number":5103,"context_line":"        # Free up the old_flavor usage from the resource tracker for this host."},{"line_number":5104,"context_line":"        self.rt.drop_move_claim_at_source(context, instance, migration)"}],"source_content_type":"text/x-python","patch_set":28,"id":"0bfdf97b_65cedb8e","line":5101,"in_reply_to":"735c8815_940264b9","updated":"2026-08-21 06:04:31.000000000","message":"Thinking some more about this, we have the hard-coded client issue as well [3], and that\u0027s a bigger problem imo, security wise and can be totally painful in prod deployments to undo/change.. If I can make it more like NFS (per host/per instance/randomized - still thinking about this), I can land a common \"healing\" code that I can wire up to both host-init as well as a periodic cleanup. \n\nWill work on this next as a separate commit, because all future work could depend on getting this right :) \nI think i can defend it as a bugfix. Let me know what you think.. I\u0027m hoping to turnaround quickly, and get it in even past feature freeze.\n\n[3] https://bugs.launchpad.net/nova/+bug/2161761","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"edea296d8b460d89368f45fab1dd800918e46d1a","unresolved":true,"context_lines":[{"line_number":5098,"context_line":""},{"line_number":5099,"context_line":"        # Unmount shares and revoke Manila access on source host."},{"line_number":5100,"context_line":"        self.share_manager.cleanup_shares_after_migration("},{"line_number":5101,"context_line":"            context, instance, migration, \"confirm resize\")"},{"line_number":5102,"context_line":""},{"line_number":5103,"context_line":"        # Free up the old_flavor usage from the resource tracker for this host."},{"line_number":5104,"context_line":"        self.rt.drop_move_claim_at_source(context, instance, migration)"}],"source_content_type":"text/x-python","patch_set":28,"id":"735c8815_940264b9","line":5101,"in_reply_to":"a618578f_c4bed5fd","updated":"2026-08-21 05:35:10.000000000","message":"Yes! the stale rule only heals if you migrate back.\n\nThis is something i was noodling to become a periodic task to clean up any unnecessary orphaned rules [1][2]\n\nI can work on this as a follow up, even a bug fix, wdyt?\n\n\n[1] https://specs.openstack.org/openstack/nova-specs/specs/2026.2/approved/virtiofs-cold-migration.html#manila-access-rule-window\n[2] https://specs.openstack.org/openstack/nova-specs/specs/2026.2/approved/virtiofs-cold-migration.html#work-items","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"499af91dd5f498a8aabdf7ed86ca85988c3d371b","unresolved":true,"context_lines":[{"line_number":5098,"context_line":""},{"line_number":5099,"context_line":"        # Unmount shares and revoke Manila access on source host."},{"line_number":5100,"context_line":"        self.share_manager.cleanup_shares_after_migration("},{"line_number":5101,"context_line":"            context, instance, migration, \"confirm resize\")"},{"line_number":5102,"context_line":""},{"line_number":5103,"context_line":"        # Free up the old_flavor usage from the resource tracker for this host."},{"line_number":5104,"context_line":"        self.rt.drop_move_claim_at_source(context, instance, migration)"}],"source_content_type":"text/x-python","patch_set":28,"id":"2f966eea_00089d77","line":5101,"in_reply_to":"e2a8cc36_c818dc45","updated":"2026-08-25 04:42:47.000000000","message":"Thanks, yeah that\u0027s fair. Working on this right now..","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d49c55c44979756af80d520ca842b33e24f4ec98","unresolved":true,"context_lines":[{"line_number":6585,"context_line":"                        try:"},{"line_number":6586,"context_line":"                            self.share_manager.umount(context, instance, sm)"},{"line_number":6587,"context_line":"                        except Exception:"},{"line_number":6588,"context_line":"                            LOG.exception("},{"line_number":6589,"context_line":"                                \"Failed to unmount share %s during \""},{"line_number":6590,"context_line":"                                \"cleanup\", sm.share_id)"},{"line_number":6591,"context_line":"                    # Don\u0027t revoke access here. instance.host already"}],"source_content_type":"text/x-python","patch_set":28,"id":"58750e4e_86cf6ac3","line":6588,"updated":"2026-08-20 16:52:50.000000000","message":"Doesn\u0027t look like you ever cover this in the tests","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c55af2696cdbad39d3d842d434f8fe0d5cfcb26b","unresolved":false,"context_lines":[{"line_number":6585,"context_line":"                        try:"},{"line_number":6586,"context_line":"                            self.share_manager.umount(context, instance, sm)"},{"line_number":6587,"context_line":"                        except Exception:"},{"line_number":6588,"context_line":"                            LOG.exception("},{"line_number":6589,"context_line":"                                \"Failed to unmount share %s during \""},{"line_number":6590,"context_line":"                                \"cleanup\", sm.share_id)"},{"line_number":6591,"context_line":"                    # Don\u0027t revoke access here. instance.host already"}],"source_content_type":"text/x-python","patch_set":28,"id":"6403bc56_151cde43","line":6588,"in_reply_to":"31457236_a13d906a","updated":"2026-08-21 05:39:31.000000000","message":"Done","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"6162eb4aa3272db7d3147246466c12882fbc1473","unresolved":true,"context_lines":[{"line_number":6585,"context_line":"                        try:"},{"line_number":6586,"context_line":"                            self.share_manager.umount(context, instance, sm)"},{"line_number":6587,"context_line":"                        except Exception:"},{"line_number":6588,"context_line":"                            LOG.exception("},{"line_number":6589,"context_line":"                                \"Failed to unmount share %s during \""},{"line_number":6590,"context_line":"                                \"cleanup\", sm.share_id)"},{"line_number":6591,"context_line":"                    # Don\u0027t revoke access here. instance.host already"}],"source_content_type":"text/x-python","patch_set":28,"id":"31457236_a13d906a","line":6588,"in_reply_to":"58750e4e_86cf6ac3","updated":"2026-08-21 05:35:56.000000000","message":"++ Adding tests","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"}],"nova/compute/share_management.py":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9883c3049a1c0696399ff9f70ef0b4b489f00be4","unresolved":true,"context_lines":[{"line_number":436,"context_line":"    def grant_access(self, context, share_mapping):"},{"line_number":437,"context_line":"        \"\"\"Grant Manila access for a share without side effects."},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        Unlike allow_share(), this does not change ShareMapping status,"},{"line_number":440,"context_line":"        send notifications, or modify the database. Used during migration"},{"line_number":441,"context_line":"        where the share remains attached to the instance."},{"line_number":442,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"6384803a_6671862b","line":439,"updated":"2026-07-31 17:09:53.000000000","message":"Didn\u0027t `allow_share()` re-use this in the previous iteration?","commit_id":"ee888cbad865671571e7d76ddebccd7afd4c31f6"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"3020c80cca70fb27342fa338fcee7ec546a3f30f","unresolved":true,"context_lines":[{"line_number":436,"context_line":"    def grant_access(self, context, share_mapping):"},{"line_number":437,"context_line":"        \"\"\"Grant Manila access for a share without side effects."},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        Unlike allow_share(), this does not change ShareMapping status,"},{"line_number":440,"context_line":"        send notifications, or modify the database. Used during migration"},{"line_number":441,"context_line":"        where the share remains attached to the instance."},{"line_number":442,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"cbe88954_8d265563","line":439,"in_reply_to":"6384803a_6671862b","updated":"2026-08-07 21:13:46.000000000","message":"hmmm, i was confused by this question first, and was then rethinking how i\u0027m naming these poorly and causing a confusion. \n\n\nThe distinction right now is:\n\n- allow_share \u003d the full RPC-facing operation (grant + status management + notifications) \n- grant_access \u003d just the Manila API call, no side effects, purely meant for migration\n\nWhat i probably should do:\n\ncall this _grant_access (and make \"revoke_access\" private too) - and use it as a constituent of the \"allow_access\" flow.\n\nDo you think that\u0027ll be okay?","commit_id":"ee888cbad865671571e7d76ddebccd7afd4c31f6"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"94b25be98494ae5bce9e86471ea73839795ab2de","unresolved":false,"context_lines":[{"line_number":436,"context_line":"    def grant_access(self, context, share_mapping):"},{"line_number":437,"context_line":"        \"\"\"Grant Manila access for a share without side effects."},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        Unlike allow_share(), this does not change ShareMapping status,"},{"line_number":440,"context_line":"        send notifications, or modify the database. Used during migration"},{"line_number":441,"context_line":"        where the share remains attached to the instance."},{"line_number":442,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"b81bcecb_37598ffb","line":439,"in_reply_to":"9c9a586d_bc79002c","updated":"2026-08-11 07:40:16.000000000","message":"Marked as resolved.\n\nAh, ack. Yes, that\u0027s correct.","commit_id":"ee888cbad865671571e7d76ddebccd7afd4c31f6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"9f41c0724897eedd7e27b1d38317fc191010add8","unresolved":true,"context_lines":[{"line_number":436,"context_line":"    def grant_access(self, context, share_mapping):"},{"line_number":437,"context_line":"        \"\"\"Grant Manila access for a share without side effects."},{"line_number":438,"context_line":""},{"line_number":439,"context_line":"        Unlike allow_share(), this does not change ShareMapping status,"},{"line_number":440,"context_line":"        send notifications, or modify the database. Used during migration"},{"line_number":441,"context_line":"        where the share remains attached to the instance."},{"line_number":442,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"9c9a586d_bc79002c","line":439,"in_reply_to":"cbe88954_8d265563","updated":"2026-08-10 13:46:44.000000000","message":"I think that calling a \"private\" from outside this share manager (i.e. from the compute manager) is not ideal. I think \"grant access\" is appropriate for what you\u0027re doing in the lesser method, and \"allow share\" makes sense as \"the whole process.\" My point was just that I think in an earlier revision of all this, you were re-using the inner/grant code in the outer larger method to avoid the duplication of calling the inner-inner methods (`_apply_access_policy` and `_wait_for_access_policy`, etc) from `allow_share()`. But, it looks like in the latest revision you\u0027re just calling `grant_access()` now, which is what this comment was about.","commit_id":"ee888cbad865671571e7d76ddebccd7afd4c31f6"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"d49c55c44979756af80d520ca842b33e24f4ec98","unresolved":true,"context_lines":[{"line_number":392,"context_line":"        No-op for same-host resize or when migration is None."},{"line_number":393,"context_line":"        \"\"\""},{"line_number":394,"context_line":"        if migration is None:"},{"line_number":395,"context_line":"            return"},{"line_number":396,"context_line":"        if migration.source_compute \u003d\u003d migration.dest_compute:"},{"line_number":397,"context_line":"            return"},{"line_number":398,"context_line":"        share_info \u003d self.get_share_info("}],"source_content_type":"text/x-python","patch_set":28,"id":"704f2b6f_5d8d6e9a","line":395,"updated":"2026-08-20 16:52:50.000000000","message":"Never covered in tests","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"6162eb4aa3272db7d3147246466c12882fbc1473","unresolved":true,"context_lines":[{"line_number":392,"context_line":"        No-op for same-host resize or when migration is None."},{"line_number":393,"context_line":"        \"\"\""},{"line_number":394,"context_line":"        if migration is None:"},{"line_number":395,"context_line":"            return"},{"line_number":396,"context_line":"        if migration.source_compute \u003d\u003d migration.dest_compute:"},{"line_number":397,"context_line":"            return"},{"line_number":398,"context_line":"        share_info \u003d self.get_share_info("}],"source_content_type":"text/x-python","patch_set":28,"id":"86bb8ae0_4444deed","line":395,"in_reply_to":"704f2b6f_5d8d6e9a","updated":"2026-08-21 05:35:56.000000000","message":"Adding tests","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c55af2696cdbad39d3d842d434f8fe0d5cfcb26b","unresolved":false,"context_lines":[{"line_number":392,"context_line":"        No-op for same-host resize or when migration is None."},{"line_number":393,"context_line":"        \"\"\""},{"line_number":394,"context_line":"        if migration is None:"},{"line_number":395,"context_line":"            return"},{"line_number":396,"context_line":"        if migration.source_compute \u003d\u003d migration.dest_compute:"},{"line_number":397,"context_line":"            return"},{"line_number":398,"context_line":"        share_info \u003d self.get_share_info("}],"source_content_type":"text/x-python","patch_set":28,"id":"78f16ac0_8e6a0d22","line":395,"in_reply_to":"86bb8ae0_4444deed","updated":"2026-08-21 05:39:31.000000000","message":"Done","commit_id":"8cd3142687f646a8ec517af44ba01284863c51a7"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e75467a4ab4f60246338ee702d91517e69b20051","unresolved":true,"context_lines":[{"line_number":354,"context_line":"                sm for sm in share_mappings_used_by_share"},{"line_number":355,"context_line":"                if sm.instance_uuid \u003d\u003d instance_uuid"},{"line_number":356,"context_line":"            ]"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        # The share is safe to revoke (not used) when every mapping"},{"line_number":359,"context_line":"        # satisfies one of:"},{"line_number":360,"context_line":"        #  - It belongs to this instance and is INACTIVE or ERROR"}],"source_content_type":"text/x-python","patch_set":31,"id":"56580011_e0d9565e","line":357,"updated":"2026-08-24 13:44:24.000000000","message":"Do we need an else case here? Coverage is complaining (I think) that we never fail both of these share proto tests. Obviously that\u0027s not a huge coverage problem but I wonder if it\u0027s indicative of us not catching a problem we might have later. If someone adds a new attachment proto that we don\u0027t support, where we do we reject that?","commit_id":"1c34a00eededbbfc9b51141bce5215e615d3e6b9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"499af91dd5f498a8aabdf7ed86ca85988c3d371b","unresolved":false,"context_lines":[{"line_number":354,"context_line":"                sm for sm in share_mappings_used_by_share"},{"line_number":355,"context_line":"                if sm.instance_uuid \u003d\u003d instance_uuid"},{"line_number":356,"context_line":"            ]"},{"line_number":357,"context_line":""},{"line_number":358,"context_line":"        # The share is safe to revoke (not used) when every mapping"},{"line_number":359,"context_line":"        # satisfies one of:"},{"line_number":360,"context_line":"        #  - It belongs to this instance and is INACTIVE or ERROR"}],"source_content_type":"text/x-python","patch_set":31,"id":"b65e3366_0ba3647d","line":357,"in_reply_to":"56580011_e0d9565e","updated":"2026-08-25 04:42:47.000000000","message":"We do that here: https://opendev.org/openstack/nova/src/commit/9aa9a54e04fdfec9a8775bf90488558783179d4b/nova/objects/share_mapping.py#L175-L178\n\nbut, i added the else clause here and covered it with tests - just as a defense.","commit_id":"1c34a00eededbbfc9b51141bce5215e615d3e6b9"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"e75467a4ab4f60246338ee702d91517e69b20051","unresolved":true,"context_lines":[{"line_number":516,"context_line":"        # instance still needs it. CephFS uses a per-instance-per-host"},{"line_number":517,"context_line":"        # cephx identity, so each grant is independent and always safe"},{"line_number":518,"context_line":"        # to revoke."},{"line_number":519,"context_line":"        if share_mapping.share_proto \u003d\u003d fields.ShareMappingProto.NFS:"},{"line_number":520,"context_line":"            share_mappings_used_by_share \u003d ("},{"line_number":521,"context_line":"                objects.share_mapping.ShareMappingList.get_by_share_id("},{"line_number":522,"context_line":"                    context, share_mapping.share_id"}],"source_content_type":"text/x-python","patch_set":31,"id":"2e163076_8e637c7b","line":519,"updated":"2026-08-24 13:44:24.000000000","message":"Looks like this was added since the last PS I reviewed.. Was this determined needed in some external testing? It\u0027s covered so I guess it was added here too, which is good.","commit_id":"1c34a00eededbbfc9b51141bce5215e615d3e6b9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"499af91dd5f498a8aabdf7ed86ca85988c3d371b","unresolved":true,"context_lines":[{"line_number":516,"context_line":"        # instance still needs it. CephFS uses a per-instance-per-host"},{"line_number":517,"context_line":"        # cephx identity, so each grant is independent and always safe"},{"line_number":518,"context_line":"        # to revoke."},{"line_number":519,"context_line":"        if share_mapping.share_proto \u003d\u003d fields.ShareMappingProto.NFS:"},{"line_number":520,"context_line":"            share_mappings_used_by_share \u003d ("},{"line_number":521,"context_line":"                objects.share_mapping.ShareMappingList.get_by_share_id("},{"line_number":522,"context_line":"                    context, share_mapping.share_id"}],"source_content_type":"text/x-python","patch_set":31,"id":"a907f22a_33d718ac","line":519,"in_reply_to":"2e163076_8e637c7b","updated":"2026-08-25 04:42:47.000000000","message":"yes, it was warranted because of how cephx auth changed now (in the parent patch) - NFS access is \"per host\" (the rule references the IP address of the host), while CephFS access is \"per host per instance\" (just some more obfuscation)","commit_id":"1c34a00eededbbfc9b51141bce5215e615d3e6b9"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"57f30911d4f04e91cd3c3ad826bd04761807ff7f","unresolved":false,"context_lines":[{"line_number":516,"context_line":"        # instance still needs it. CephFS uses a per-instance-per-host"},{"line_number":517,"context_line":"        # cephx identity, so each grant is independent and always safe"},{"line_number":518,"context_line":"        # to revoke."},{"line_number":519,"context_line":"        if share_mapping.share_proto \u003d\u003d fields.ShareMappingProto.NFS:"},{"line_number":520,"context_line":"            share_mappings_used_by_share \u003d ("},{"line_number":521,"context_line":"                objects.share_mapping.ShareMappingList.get_by_share_id("},{"line_number":522,"context_line":"                    context, share_mapping.share_id"}],"source_content_type":"text/x-python","patch_set":31,"id":"751ed991_178c0ca7","line":519,"in_reply_to":"a907f22a_33d718ac","updated":"2026-09-01 08:07:26.000000000","message":"Marked as resolved.","commit_id":"1c34a00eededbbfc9b51141bce5215e615d3e6b9"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"6943a21b04333f6350556fa5e9cf17927bc59ba5","unresolved":true,"context_lines":[{"line_number":524,"context_line":"        # instance on this host, so only revoke it when no other"},{"line_number":525,"context_line":"        # instance still needs it. CephFS uses a per-instance-per-host"},{"line_number":526,"context_line":"        # cephx identity, so each grant is independent and always safe"},{"line_number":527,"context_line":"        # to revoke."},{"line_number":528,"context_line":"        if share_mapping.share_proto \u003d\u003d fields.ShareMappingProto.NFS:"},{"line_number":529,"context_line":"            share_mappings_used_by_share \u003d ("},{"line_number":530,"context_line":"                objects.share_mapping.ShareMappingList.get_by_share_id("}],"source_content_type":"text/x-python","patch_set":41,"id":"8606e0c3_5a86ba6a","line":527,"updated":"2026-09-02 03:04:49.000000000","message":"This says that rules are per host but the logic below is not filtering by host. There is similar logic in `check_share_usage` [1], is there a reason we should not call that here to reuse the logic or otherwise commonize the logic to use here?\n\nIs there a way we could cover this test case where an instance on a different host is using the same share and would erroneously prevent access to be revoked for this host?\n\n[1] https://review.opendev.org/c/openstack/nova/+/989633/41/nova/compute/share_management.py#325","commit_id":"3420b4d6c9cd50714eba75b36a5f2fd47555cda0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed016d0fa0deac8383041a1cf5ea62d8773bc6b","unresolved":false,"context_lines":[{"line_number":524,"context_line":"        # instance on this host, so only revoke it when no other"},{"line_number":525,"context_line":"        # instance still needs it. CephFS uses a per-instance-per-host"},{"line_number":526,"context_line":"        # cephx identity, so each grant is independent and always safe"},{"line_number":527,"context_line":"        # to revoke."},{"line_number":528,"context_line":"        if share_mapping.share_proto \u003d\u003d fields.ShareMappingProto.NFS:"},{"line_number":529,"context_line":"            share_mappings_used_by_share \u003d ("},{"line_number":530,"context_line":"                objects.share_mapping.ShareMappingList.get_by_share_id("}],"source_content_type":"text/x-python","patch_set":41,"id":"73300323_40c28d26","line":527,"in_reply_to":"8606e0c3_5a86ba6a","updated":"2026-09-02 05:23:45.000000000","message":"Ack; fixed revoke_access to filter on CONF.host. I reused the query with some refactoring, and added a test for the cross-host case.","commit_id":"3420b4d6c9cd50714eba75b36a5f2fd47555cda0"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c6d4772ef5ea54d55b4f5c2a66e8647ef3c9b846","unresolved":true,"context_lines":[{"line_number":333,"context_line":"        same_host_uuids \u003d {keep_uuid}"},{"line_number":334,"context_line":"        if other_uuids:"},{"line_number":335,"context_line":"            others \u003d objects.InstanceList.get_by_filters("},{"line_number":336,"context_line":"                context, {\u0027uuid\u0027: other_uuids}, expected_attrs\u003d[])"},{"line_number":337,"context_line":"            same_host_uuids.update("},{"line_number":338,"context_line":"                inst.uuid for inst in others if inst.host \u003d\u003d host)"},{"line_number":339,"context_line":"        return ["}],"source_content_type":"text/x-python","patch_set":44,"id":"1d048baa_c3299089","line":336,"updated":"2026-09-04 16:09:07.000000000","message":"I guess this is existing code relocated, but ... I wonder why this is not filtering by uuid and host in the query? If you had a thousand instances using a share this would return all thousand and then we\u0027d iterate and filter out just the one still on this host in python.","commit_id":"fa1d7431d51749963d39c917f05116da9164e0d6"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"86f0def553cab03817e66f54deab63a1a882599b","unresolved":true,"context_lines":[{"line_number":333,"context_line":"        same_host_uuids \u003d {keep_uuid}"},{"line_number":334,"context_line":"        if other_uuids:"},{"line_number":335,"context_line":"            others \u003d objects.InstanceList.get_by_filters("},{"line_number":336,"context_line":"                context, {\u0027uuid\u0027: other_uuids}, expected_attrs\u003d[])"},{"line_number":337,"context_line":"            same_host_uuids.update("},{"line_number":338,"context_line":"                inst.uuid for inst in others if inst.host \u003d\u003d host)"},{"line_number":339,"context_line":"        return ["}],"source_content_type":"text/x-python","patch_set":44,"id":"2bdea1f3_5c6a1084","line":336,"in_reply_to":"1d048baa_c3299089","updated":"2026-09-04 17:23:36.000000000","message":"Agreed it seems odd this will not also filter on host.","commit_id":"fa1d7431d51749963d39c917f05116da9164e0d6"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"0f4b11020e7e438447855c8289f8a2c13b2d68de","unresolved":true,"context_lines":[{"line_number":333,"context_line":"        same_host_uuids \u003d {keep_uuid}"},{"line_number":334,"context_line":"        if other_uuids:"},{"line_number":335,"context_line":"            others \u003d objects.InstanceList.get_by_filters("},{"line_number":336,"context_line":"                context, {\u0027uuid\u0027: other_uuids}, expected_attrs\u003d[])"},{"line_number":337,"context_line":"            same_host_uuids.update("},{"line_number":338,"context_line":"                inst.uuid for inst in others if inst.host \u003d\u003d host)"},{"line_number":339,"context_line":"        return ["}],"source_content_type":"text/x-python","patch_set":44,"id":"70b222ba_3e0ec5e6","line":336,"in_reply_to":"2bdea1f3_5c6a1084","updated":"2026-09-04 17:59:16.000000000","message":"Indeed; i\u0027m working on a follow up patch just for this... \n\n/me didn\u0027t want to re-run CI here. It\u0027s been particularly hard to get a green run and it\u0027s bad timing for me to hog the gate with a series of changes that will merely get rebased because something got updated in the commit in between :)","commit_id":"fa1d7431d51749963d39c917f05116da9164e0d6"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9324f460bcd9bb10542dd6539d29270e3c9975c1","unresolved":false,"context_lines":[{"line_number":1605,"context_line":"                side_effect\u003dexception.VirtualInterfacePlugException("},{"line_number":1606,"context_line":"                    \"Unexpected vif_type\u003dbinding_failed\")),"},{"line_number":1607,"context_line":"            mock.patch.object(self.compute, \u0027_set_instance_obj_error_state\u0027),"},{"line_number":1608,"context_line":"            mock.patch(\u0027nova.compute.share_management.ShareManager.get_share_info\u0027,"},{"line_number":1609,"context_line":"                return_value\u003dobjects.ShareMappingList()),"},{"line_number":1610,"context_line":"        ) as ("},{"line_number":1611,"context_line":"            get_admin_context,"}],"source_content_type":"text/x-python","patch_set":21,"id":"54b7a8a1_aa64de20","line":1608,"updated":"2026-08-07 08:37:34.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"b50090d160d6b3084275dd39136a2c587d53684f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9324f460bcd9bb10542dd6539d29270e3c9975c1","unresolved":false,"context_lines":[{"line_number":1636,"context_line":"            mock.patch.object(self.compute.driver, \u0027plug_vifs\u0027,"},{"line_number":1637,"context_line":"                side_effect\u003dexception.PciDeviceNotFoundById(\"pci-addr\")),"},{"line_number":1638,"context_line":"            mock.patch(\"nova.compute.manager.LOG.exception\"),"},{"line_number":1639,"context_line":"            mock.patch(\"nova.compute.share_management.ShareManager.get_share_info\","},{"line_number":1640,"context_line":"            return_value\u003dobjects.ShareMappingList()),"},{"line_number":1641,"context_line":"        ) as ("},{"line_number":1642,"context_line":"                get_admin_context,"}],"source_content_type":"text/x-python","patch_set":21,"id":"21b9c76b_446639aa","line":1639,"updated":"2026-08-07 08:37:34.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"b50090d160d6b3084275dd39136a2c587d53684f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9324f460bcd9bb10542dd6539d29270e3c9975c1","unresolved":false,"context_lines":[{"line_number":1829,"context_line":""},{"line_number":1830,"context_line":"        with test.nested("},{"line_number":1831,"context_line":"            mock.patch.object(self.compute, \u0027_complete_partial_deletion\u0027),"},{"line_number":1832,"context_line":"            mock.patch(\"nova.compute.share_management.ShareManager.get_share_info\","},{"line_number":1833,"context_line":"                return_value\u003dobjects.ShareMappingList())"},{"line_number":1834,"context_line":"        ) as (mock_deletion, mock_shares):"},{"line_number":1835,"context_line":"            mock_deletion.side_effect \u003d test.TestingException()"}],"source_content_type":"text/x-python","patch_set":21,"id":"67ea9ff7_47d17304","line":1832,"updated":"2026-08-07 08:37:34.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"b50090d160d6b3084275dd39136a2c587d53684f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9324f460bcd9bb10542dd6539d29270e3c9975c1","unresolved":false,"context_lines":[{"line_number":1858,"context_line":"                mock.patch.object(self.compute, \u0027_delete_instance\u0027),"},{"line_number":1859,"context_line":"                mock.patch.object(instance, \u0027obj_load_attr\u0027),"},{"line_number":1860,"context_line":"                mock.patch("},{"line_number":1861,"context_line":"                    \u0027nova.compute.share_management.ShareManager.get_share_info\u0027,"},{"line_number":1862,"context_line":"                    return_value\u003dobjects.ShareMappingList()),"},{"line_number":1863,"context_line":"        ) as (mock_get, mock_delete, mock_load, mock_shares):"},{"line_number":1864,"context_line":"            self.compute._init_instance(self.context, instance)"}],"source_content_type":"text/x-python","patch_set":21,"id":"140c7e25_dcab2572","line":1861,"updated":"2026-08-07 08:37:34.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"b50090d160d6b3084275dd39136a2c587d53684f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9324f460bcd9bb10542dd6539d29270e3c9975c1","unresolved":false,"context_lines":[{"line_number":2023,"context_line":"                task_state\u003dtask_state)"},{"line_number":2024,"context_line":"        with test.nested("},{"line_number":2025,"context_line":"            mock.patch.object(instance, \u0027save\u0027),"},{"line_number":2026,"context_line":"            mock.patch(\"nova.compute.share_management.ShareManager.get_share_info\","},{"line_number":2027,"context_line":"                       return_value\u003dobjects.ShareMappingList()),"},{"line_number":2028,"context_line":"        ) as (save, mock_shares):"},{"line_number":2029,"context_line":"            self.compute._init_instance(self.context, instance)"}],"source_content_type":"text/x-python","patch_set":21,"id":"0b616dfd_abea17b6","line":2026,"updated":"2026-08-07 08:37:34.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"b50090d160d6b3084275dd39136a2c587d53684f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9324f460bcd9bb10542dd6539d29270e3c9975c1","unresolved":false,"context_lines":[{"line_number":2090,"context_line":"    def _test_init_instance_cleans_image_states(self, instance):"},{"line_number":2091,"context_line":"        with test.nested("},{"line_number":2092,"context_line":"            mock.patch.object(instance, \u0027save\u0027),"},{"line_number":2093,"context_line":"            mock.patch(\"nova.compute.share_management.ShareManager.get_share_info\","},{"line_number":2094,"context_line":"                       return_value\u003dobjects.ShareMappingList()),"},{"line_number":2095,"context_line":"        ) as (save, mock_shares):"},{"line_number":2096,"context_line":"            self.compute._get_power_state \u003d mock.Mock()"}],"source_content_type":"text/x-python","patch_set":21,"id":"cc15c6d2_40e48adc","line":2093,"updated":"2026-08-07 08:37:34.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"b50090d160d6b3084275dd39136a2c587d53684f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9324f460bcd9bb10542dd6539d29270e3c9975c1","unresolved":false,"context_lines":[{"line_number":2197,"context_line":"                mock.patch.object(self.compute, \u0027_delete_instance\u0027),"},{"line_number":2198,"context_line":"                mock.patch.object(instance, \u0027obj_load_attr\u0027),"},{"line_number":2199,"context_line":"                mock.patch("},{"line_number":2200,"context_line":"                    \"nova.compute.share_management.ShareManager.get_share_info\","},{"line_number":2201,"context_line":"                    return_value\u003dobjects.ShareMappingList()),"},{"line_number":2202,"context_line":"        ) as (mock_get, mock_delete, mock_load, mock_shares):"},{"line_number":2203,"context_line":"            self.compute._init_instance(self.context, instance)"}],"source_content_type":"text/x-python","patch_set":21,"id":"de89781e_7a1ef9fa","line":2200,"updated":"2026-08-07 08:37:34.000000000","message":"pep8: E501 line too long (80 \u003e 79 characters)","commit_id":"b50090d160d6b3084275dd39136a2c587d53684f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9324f460bcd9bb10542dd6539d29270e3c9975c1","unresolved":false,"context_lines":[{"line_number":2219,"context_line":"                              return_value\u003dpower_state.RUNNING),"},{"line_number":2220,"context_line":"            mock.patch.object(objects.Instance, \u0027get_network_info\u0027),"},{"line_number":2221,"context_line":"            mock.patch.object(instance, \u0027save\u0027, autospec\u003dTrue),"},{"line_number":2222,"context_line":"            mock.patch(\"nova.compute.share_management.ShareManager.get_share_info\","},{"line_number":2223,"context_line":"                       return_value\u003dobjects.ShareMappingList())"},{"line_number":2224,"context_line":"        ) as ("},{"line_number":2225,"context_line":"                mock_get_power_state,"}],"source_content_type":"text/x-python","patch_set":21,"id":"7b56dbe3_f35bdb2a","line":2222,"updated":"2026-08-07 08:37:34.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"b50090d160d6b3084275dd39136a2c587d53684f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9324f460bcd9bb10542dd6539d29270e3c9975c1","unresolved":false,"context_lines":[{"line_number":3991,"context_line":"            mock.patch.object(instance, \u0027save\u0027, autospec\u003dTrue),"},{"line_number":3992,"context_line":"            mock.patch.object(objects.Instance, \u0027get_network_info\u0027),"},{"line_number":3993,"context_line":"            mock.patch.object(self.compute, \u0027reboot_instance\u0027),"},{"line_number":3994,"context_line":"            mock.patch(\"nova.compute.share_management.ShareManager.get_share_info\","},{"line_number":3995,"context_line":"                       return_value\u003dobjects.ShareMappingList())"},{"line_number":3996,"context_line":"          ) as ("},{"line_number":3997,"context_line":"            _get_power_state,"}],"source_content_type":"text/x-python","patch_set":21,"id":"4f141324_31b5e95e","line":3994,"updated":"2026-08-07 08:37:34.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"b50090d160d6b3084275dd39136a2c587d53684f"},{"author":{"_account_id":22348,"name":"Zuul","username":"zuul","tags":["SERVICE_USER"]},"tag":"autogenerated:zuul:check","change_message_id":"9324f460bcd9bb10542dd6539d29270e3c9975c1","unresolved":false,"context_lines":[{"line_number":6719,"context_line":"            mock.patch.object(self.compute, \u0027_get_power_state\u0027,"},{"line_number":6720,"context_line":"                              return_value\u003dpower_state.RUNNING),"},{"line_number":6721,"context_line":"            mock.patch.object(instance, \u0027save\u0027),"},{"line_number":6722,"context_line":"            mock.patch(\u0027nova.compute.share_management.ShareManager.get_share_info\u0027)"},{"line_number":6723,"context_line":"        ) as ("},{"line_number":6724,"context_line":"            elevated_context, get_nw_info, get_rescue_image,"},{"line_number":6725,"context_line":"            get_bdm_list, get_block_info, notify_instance_usage,"}],"source_content_type":"text/x-python","patch_set":21,"id":"147829e7_c72521bd","line":6722,"updated":"2026-08-07 08:37:34.000000000","message":"pep8: E501 line too long (83 \u003e 79 characters)","commit_id":"b50090d160d6b3084275dd39136a2c587d53684f"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"6943a21b04333f6350556fa5e9cf17927bc59ba5","unresolved":true,"context_lines":[{"line_number":3725,"context_line":""},{"line_number":3726,"context_line":"        # Test fresh grant: first has_access returns False, then True"},{"line_number":3727,"context_line":"        mock_has_access.side_effect \u003d ["},{"line_number":3728,"context_line":"    None, None, self.get_fake_share_access()]"},{"line_number":3729,"context_line":"        self.compute.share_manager.grant_access(self.context, share_mapping)"},{"line_number":3730,"context_line":"        mock_allow.assert_called_once_with("},{"line_number":3731,"context_line":"            mock.ANY, share_mapping.share_id, \u0027ip\u0027, compute_ip, \u0027rw\u0027)"}],"source_content_type":"text/x-python","patch_set":41,"id":"290069f3_35a3901b","line":3728,"updated":"2026-09-02 03:04:49.000000000","message":"This indent got wacky.","commit_id":"3420b4d6c9cd50714eba75b36a5f2fd47555cda0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"73557ad2b4b4a7dc2bbc0403d8a9df9e183c4742","unresolved":false,"context_lines":[{"line_number":3725,"context_line":""},{"line_number":3726,"context_line":"        # Test fresh grant: first has_access returns False, then True"},{"line_number":3727,"context_line":"        mock_has_access.side_effect \u003d ["},{"line_number":3728,"context_line":"    None, None, self.get_fake_share_access()]"},{"line_number":3729,"context_line":"        self.compute.share_manager.grant_access(self.context, share_mapping)"},{"line_number":3730,"context_line":"        mock_allow.assert_called_once_with("},{"line_number":3731,"context_line":"            mock.ANY, share_mapping.share_id, \u0027ip\u0027, compute_ip, \u0027rw\u0027)"}],"source_content_type":"text/x-python","patch_set":41,"id":"66f2ecd5_6266c2a8","line":3728,"in_reply_to":"290069f3_35a3901b","updated":"2026-09-02 05:27:48.000000000","message":"Done","commit_id":"3420b4d6c9cd50714eba75b36a5f2fd47555cda0"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"6943a21b04333f6350556fa5e9cf17927bc59ba5","unresolved":true,"context_lines":[{"line_number":3765,"context_line":"        # Test revoke when no other instances use the share"},{"line_number":3766,"context_line":"        mock_get_by_share.return_value \u003d ("},{"line_number":3767,"context_line":"            objects.share_mapping.ShareMappingList("},{"line_number":3768,"context_line":"                objects\u003d[share_mapping]))"},{"line_number":3769,"context_line":"        self.compute.share_manager.revoke_access(self.context, share_mapping)"},{"line_number":3770,"context_line":"        mock_deny.assert_called_once_with("},{"line_number":3771,"context_line":"            mock.ANY, share_mapping.share_id, \u0027ip\u0027, compute_ip)"}],"source_content_type":"text/x-python","patch_set":41,"id":"8f0ae7b8_de3b5dc0","line":3768,"updated":"2026-09-02 03:04:49.000000000","message":"Possible unnecessary new line.","commit_id":"3420b4d6c9cd50714eba75b36a5f2fd47555cda0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"73557ad2b4b4a7dc2bbc0403d8a9df9e183c4742","unresolved":false,"context_lines":[{"line_number":3765,"context_line":"        # Test revoke when no other instances use the share"},{"line_number":3766,"context_line":"        mock_get_by_share.return_value \u003d ("},{"line_number":3767,"context_line":"            objects.share_mapping.ShareMappingList("},{"line_number":3768,"context_line":"                objects\u003d[share_mapping]))"},{"line_number":3769,"context_line":"        self.compute.share_manager.revoke_access(self.context, share_mapping)"},{"line_number":3770,"context_line":"        mock_deny.assert_called_once_with("},{"line_number":3771,"context_line":"            mock.ANY, share_mapping.share_id, \u0027ip\u0027, compute_ip)"}],"source_content_type":"text/x-python","patch_set":41,"id":"ec2548e7_95326187","line":3768,"in_reply_to":"8f0ae7b8_de3b5dc0","updated":"2026-09-02 05:27:48.000000000","message":"Done","commit_id":"3420b4d6c9cd50714eba75b36a5f2fd47555cda0"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"6943a21b04333f6350556fa5e9cf17927bc59ba5","unresolved":true,"context_lines":[{"line_number":3921,"context_line":"                task_state\u003dtask_states.POWERING_OFF)"},{"line_number":3922,"context_line":"        share_mapping \u003d self.get_fake_share_mapping()"},{"line_number":3923,"context_line":"        self.compute.share_manager.umount("},{"line_number":3924,"context_line":"    self.context, instance, share_mapping)"},{"line_number":3925,"context_line":"        mock_drv.assert_called_once_with(self.context, instance, share_mapping)"},{"line_number":3926,"context_line":""},{"line_number":3927,"context_line":"    @mock.patch(\u0027nova.share.manila.API.get_access\u0027)"}],"source_content_type":"text/x-python","patch_set":41,"id":"a1f2c83e_75a799eb","line":3924,"updated":"2026-09-02 03:04:49.000000000","message":"Unrelated indentation damage.","commit_id":"3420b4d6c9cd50714eba75b36a5f2fd47555cda0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"73557ad2b4b4a7dc2bbc0403d8a9df9e183c4742","unresolved":false,"context_lines":[{"line_number":3921,"context_line":"                task_state\u003dtask_states.POWERING_OFF)"},{"line_number":3922,"context_line":"        share_mapping \u003d self.get_fake_share_mapping()"},{"line_number":3923,"context_line":"        self.compute.share_manager.umount("},{"line_number":3924,"context_line":"    self.context, instance, share_mapping)"},{"line_number":3925,"context_line":"        mock_drv.assert_called_once_with(self.context, instance, share_mapping)"},{"line_number":3926,"context_line":""},{"line_number":3927,"context_line":"    @mock.patch(\u0027nova.share.manila.API.get_access\u0027)"}],"source_content_type":"text/x-python","patch_set":41,"id":"63fb3cc1_db5d7fad","line":3924,"in_reply_to":"a1f2c83e_75a799eb","updated":"2026-09-02 05:27:48.000000000","message":"Done","commit_id":"3420b4d6c9cd50714eba75b36a5f2fd47555cda0"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"6943a21b04333f6350556fa5e9cf17927bc59ba5","unresolved":true,"context_lines":[{"line_number":3937,"context_line":"        share_mapping \u003d self.get_fake_share_mapping_cephfs()"},{"line_number":3938,"context_line":"        mock_get_access.return_value \u003d self.get_fake_share_access_cephfs()"},{"line_number":3939,"context_line":"        self.compute.share_manager.umount("},{"line_number":3940,"context_line":"    self.context, instance, share_mapping)"},{"line_number":3941,"context_line":"        mock_get_access.assert_called_once()"},{"line_number":3942,"context_line":"        mock_drv.assert_called_once_with("},{"line_number":3943,"context_line":"            self.context, instance, share_mapping)"}],"source_content_type":"text/x-python","patch_set":41,"id":"7004994c_aef498de","line":3940,"updated":"2026-09-02 03:04:49.000000000","message":"Unrelated indentation damage.","commit_id":"3420b4d6c9cd50714eba75b36a5f2fd47555cda0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"73557ad2b4b4a7dc2bbc0403d8a9df9e183c4742","unresolved":false,"context_lines":[{"line_number":3937,"context_line":"        share_mapping \u003d self.get_fake_share_mapping_cephfs()"},{"line_number":3938,"context_line":"        mock_get_access.return_value \u003d self.get_fake_share_access_cephfs()"},{"line_number":3939,"context_line":"        self.compute.share_manager.umount("},{"line_number":3940,"context_line":"    self.context, instance, share_mapping)"},{"line_number":3941,"context_line":"        mock_get_access.assert_called_once()"},{"line_number":3942,"context_line":"        mock_drv.assert_called_once_with("},{"line_number":3943,"context_line":"            self.context, instance, share_mapping)"}],"source_content_type":"text/x-python","patch_set":41,"id":"712afe0a_78d9c7d5","line":3940,"in_reply_to":"7004994c_aef498de","updated":"2026-09-02 05:27:48.000000000","message":"Done","commit_id":"3420b4d6c9cd50714eba75b36a5f2fd47555cda0"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"6943a21b04333f6350556fa5e9cf17927bc59ba5","unresolved":true,"context_lines":[{"line_number":11592,"context_line":"            self.compute.share_manager, \u0027get_share_info\u0027,"},{"line_number":11593,"context_line":"            return_value\u003dobjects.ShareMappingList(objects\u003d[]))"},{"line_number":11594,"context_line":"        self.mock_get_share_info \u003d p.start()"},{"line_number":11595,"context_line":"        self.addCleanup(p.stop)"},{"line_number":11596,"context_line":""},{"line_number":11597,"context_line":"    @contextlib.contextmanager"},{"line_number":11598,"context_line":"    def _mock_finish_resize(self):"}],"source_content_type":"text/x-python","patch_set":41,"id":"62330f0c_1d87e643","line":11595,"updated":"2026-09-02 03:04:49.000000000","message":"Can we use `useFixture(fixtures.MockPatchObject(...)).mock` here instead of the start stop cleanup?","commit_id":"3420b4d6c9cd50714eba75b36a5f2fd47555cda0"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"73557ad2b4b4a7dc2bbc0403d8a9df9e183c4742","unresolved":false,"context_lines":[{"line_number":11592,"context_line":"            self.compute.share_manager, \u0027get_share_info\u0027,"},{"line_number":11593,"context_line":"            return_value\u003dobjects.ShareMappingList(objects\u003d[]))"},{"line_number":11594,"context_line":"        self.mock_get_share_info \u003d p.start()"},{"line_number":11595,"context_line":"        self.addCleanup(p.stop)"},{"line_number":11596,"context_line":""},{"line_number":11597,"context_line":"    @contextlib.contextmanager"},{"line_number":11598,"context_line":"    def _mock_finish_resize(self):"}],"source_content_type":"text/x-python","patch_set":41,"id":"96f5661c_6f00d43a","line":11595,"in_reply_to":"62330f0c_1d87e643","updated":"2026-09-02 05:27:48.000000000","message":"Ack, ty!","commit_id":"3420b4d6c9cd50714eba75b36a5f2fd47555cda0"}]}
