)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e8268af266a310bc273a5aaf469cb38f6fd9305c","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix swap disk creation skipped on NFS during cold migration"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"A customer reported that the previous fix (patch 988547) does not"},{"line_number":10,"context_line":"work in practice. That fix attempted to invalidate the NFS attribute"},{"line_number":11,"context_line":"cache from userspace using O_CREAT|O_EXCL, but this is unreliable"},{"line_number":12,"context_line":"as the behavior depends on NFS version, mount options and client"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"d1be4f50_fd8babfd","line":9,"range":{"start_line":9,"start_character":1,"end_line":9,"end_character":20},"updated":"2026-10-06 16:21:30.000000000","message":"even in this indreict form we shoudl nto refer to custoemrs in commeit messages.","commit_id":"7d8ac0e122db8ef9d364f636cc1f5a734a2c8ee2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e8268af266a310bc273a5aaf469cb38f6fd9305c","unresolved":true,"context_lines":[{"line_number":9,"context_line":"A customer reported that the previous fix (patch 988547) does not"},{"line_number":10,"context_line":"work in practice. That fix attempted to invalidate the NFS attribute"},{"line_number":11,"context_line":"cache from userspace using O_CREAT|O_EXCL, but this is unreliable"},{"line_number":12,"context_line":"as the behavior depends on NFS version, mount options and client"},{"line_number":13,"context_line":"implementation."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Rather than fighting the NFS cache, this adds a force parameter"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fb4140c3_abf9ca55","line":12,"range":{"start_line":12,"start_character":26,"end_line":12,"end_character":38},"updated":"2026-10-06 16:21:30.000000000","message":"so downstream we do not supprot anything less then v4\n\nwe deprecated v3 in 16.0 like 8 years ago and we recommend using at least v4.2 upstream nnd downstream\n\nso the versions that nova supprot all supprot  O_CREAT|O_EXCL\n\nwe validated the version requrieemnts as part of the orgianl reivew so that is not really an argument to change this.","commit_id":"7d8ac0e122db8ef9d364f636cc1f5a734a2c8ee2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e8268af266a310bc273a5aaf469cb38f6fd9305c","unresolved":true,"context_lines":[{"line_number":15,"context_line":"Rather than fighting the NFS cache, this adds a force parameter"},{"line_number":16,"context_line":"to Image.cache() that bypasses the os.path.exists() check. During"},{"line_number":17,"context_line":"cold migration, swap is the only disk intentionally not copied"},{"line_number":18,"context_line":"(it is always recreated), so the exists() check is counterproductive."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Long term, not using backing files for swap disks would avoid"},{"line_number":21,"context_line":"this issue altogether."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"526d4ecd_f3a3340a","line":18,"updated":"2026-10-06 16:21:30.000000000","message":"that is turning a local detection issue into a public api change when we already know we shoudl not be caching swap disks or using backign fiels for them.\n\nthe same is also ture for all ephemeral disks espcically because it technally cuase filesystme currption which only xfs and zfs detect since the filesystem uuid of the backing files is diffenrt between hosts.","commit_id":"7d8ac0e122db8ef9d364f636cc1f5a734a2c8ee2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e8268af266a310bc273a5aaf469cb38f6fd9305c","unresolved":true,"context_lines":[{"line_number":18,"context_line":"(it is always recreated), so the exists() check is counterproductive."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Long term, not using backing files for swap disks would avoid"},{"line_number":21,"context_line":"this issue altogether."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Closes-Bug: #2152581"},{"line_number":24,"context_line":"Assisted-By: Claude-Code opus 4.6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1006247e_9ba4f3e5","line":21,"updated":"2026-10-06 16:21:30.000000000","message":"yes we have been talking about that for litrally years at this point\n\ni think we shoudl just do that now instead of continuing to hack around this.","commit_id":"7d8ac0e122db8ef9d364f636cc1f5a734a2c8ee2"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3ef5d9745b281287266e6029e0f47349df8e2099","unresolved":true,"context_lines":[{"line_number":5472,"context_line":"            # Long term, not using backing files for swap disks"},{"line_number":5473,"context_line":"            # would avoid this issue altogether."},{"line_number":5474,"context_line":"            force_swap_creation \u003d ("},{"line_number":5475,"context_line":"                ignore_bdi_for_swap and swap.is_file_in_instance_path())"},{"line_number":5476,"context_line":"            # Short circuit the exists() tests if we already created a disk"},{"line_number":5477,"context_line":"            created_disks \u003d created_disks or not swap.exists()"},{"line_number":5478,"context_line":"            swap.cache("}],"source_content_type":"text/x-python","patch_set":1,"id":"3f8d6ff3_5cf5aaae","line":5475,"range":{"start_line":5475,"start_character":16,"end_line":5475,"end_character":35},"updated":"2026-09-23 22:33:58.000000000","message":"This doesn\u0027t seem related to determine whether or not to create the swap disk, unless I am missing something. Whether the swap size comes from the flavor or the block device info should not have anything to do with whether we want to always create the disk.","commit_id":"a29a676c7971d08ae06357c4809aeca56381bbfd"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2be25007352a0e89ee0e972941849df0d1e11d03","unresolved":true,"context_lines":[{"line_number":5472,"context_line":"            # Long term, not using backing files for swap disks"},{"line_number":5473,"context_line":"            # would avoid this issue altogether."},{"line_number":5474,"context_line":"            force_swap_creation \u003d ("},{"line_number":5475,"context_line":"                ignore_bdi_for_swap and swap.is_file_in_instance_path())"},{"line_number":5476,"context_line":"            # Short circuit the exists() tests if we already created a disk"},{"line_number":5477,"context_line":"            created_disks \u003d created_disks or not swap.exists()"},{"line_number":5478,"context_line":"            swap.cache("}],"source_content_type":"text/x-python","patch_set":1,"id":"7f0deaba_b59b8d3c","line":5475,"range":{"start_line":5475,"start_character":16,"end_line":5475,"end_character":35},"in_reply_to":"3f8d6ff3_5cf5aaae","updated":"2026-10-06 13:06:49.000000000","message":"ignore_bdi_for_swap is only set to True when _create_image is called from finish_migration, so it effectively serves as the migration indicator here. When we\u0027re in a migration context AND the swap is file-backed (is_file_in_instance_path()), we know the swap was intentionally not copied and just be recreated so we set force\u003dTrue to bypass the stale NFS exists() checks.","commit_id":"a29a676c7971d08ae06357c4809aeca56381bbfd"}],"nova/virt/libvirt/imagebackend.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3ef5d9745b281287266e6029e0f47349df8e2099","unresolved":true,"context_lines":[{"line_number":307,"context_line":"        if force or not self.exists() or not os.path.exists(base):"},{"line_number":308,"context_line":"            self.create_image("},{"line_number":309,"context_line":"                fetch_func_sync, base, size, safe\u003dsafe, *args,"},{"line_number":310,"context_line":"                **kwargs)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        if size:"},{"line_number":313,"context_line":"            # create_image() only creates the base image if needed, so"}],"source_content_type":"text/x-python","patch_set":1,"id":"c8f320d0_21f2d521","line":310,"updated":"2026-09-23 22:33:58.000000000","message":"So, what happens in every other scenario that is not a resize/cold migration? What happens when you call create_image() when the image already exists? Does it raise an error? Does it overwrite the disk?\n\nAlso, as far as I can tell, this will not work as-is because create_image() has its own checks for existence before it creates images ... so it will still see the disk as existing and not create it. Did this actually work to recreate a disk when you tested it?","commit_id":"a29a676c7971d08ae06357c4809aeca56381bbfd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e8268af266a310bc273a5aaf469cb38f6fd9305c","unresolved":true,"context_lines":[{"line_number":307,"context_line":"        if force or not self.exists() or not os.path.exists(base):"},{"line_number":308,"context_line":"            self.create_image("},{"line_number":309,"context_line":"                fetch_func_sync, base, size, safe\u003dsafe, *args,"},{"line_number":310,"context_line":"                **kwargs)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        if size:"},{"line_number":313,"context_line":"            # create_image() only creates the base image if needed, so"}],"source_content_type":"text/x-python","patch_set":1,"id":"941d1130_67c17ebc","line":310,"in_reply_to":"4415ebc8_aabb0537","updated":"2026-10-06 16:21:30.000000000","message":"that is not in line wiht upstream review pratcatces.\n\nwe maintain master such that each commit can be deployed directly into production.\n\nits never ok to do testing after the fact like that or defer it to a custoemr.\n\nif you want to work on this bug i woudl expect you to take the time to repoduce it in a multi node devstack and test it end to end inclduign makeign sure we have enough regression coverage to detect this in the long term.\n\nthat really shoudl mean ensureing we have a multi node nfs job with tempest coverage of this secnarito give this is not somethign we can really replicate in functional tests alone.","commit_id":"a29a676c7971d08ae06357c4809aeca56381bbfd"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2be25007352a0e89ee0e972941849df0d1e11d03","unresolved":true,"context_lines":[{"line_number":307,"context_line":"        if force or not self.exists() or not os.path.exists(base):"},{"line_number":308,"context_line":"            self.create_image("},{"line_number":309,"context_line":"                fetch_func_sync, base, size, safe\u003dsafe, *args,"},{"line_number":310,"context_line":"                **kwargs)"},{"line_number":311,"context_line":""},{"line_number":312,"context_line":"        if size:"},{"line_number":313,"context_line":"            # create_image() only creates the base image if needed, so"}],"source_content_type":"text/x-python","patch_set":1,"id":"4415ebc8_aabb0537","line":310,"in_reply_to":"c8f320d0_21f2d521","updated":"2026-10-06 13:06:49.000000000","message":"You were right PS1 was broken. The force flag bypassed the exists() check in cache() but create_image() has its own independent existence checks that would still see the stale NFS result and skip creation.\n\nIn PS2, force is now propagated from cache() into create_image() across all backends (Flat, Qcow2, LVM, RBD, Ploop). Only Flat and Qcow2 use it to bypass their internal exists() guards, the others accept it for interface consistency.\nI added a targeted tests for both. In every non-migration scenario, force is False, so the behavior should be unchanged.\n\nTo be honest, I haven\u0027t been able to test this end-to-end as I don\u0027t have a multi-node environment with NFS shared storage. In my mind, the goal at this point is to agree on the approach first, then ask the customer to validate the fix on their environment as it looks possible.","commit_id":"a29a676c7971d08ae06357c4809aeca56381bbfd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e8268af266a310bc273a5aaf469cb38f6fd9305c","unresolved":true,"context_lines":[{"line_number":147,"context_line":"        :base: Template name"},{"line_number":148,"context_line":"        :size: Size of created image in bytes"},{"line_number":149,"context_line":"        :safe: True if image contains a safe filesystem"},{"line_number":150,"context_line":"        :force: If True, skip existence checks and always create the"},{"line_number":151,"context_line":"                image. See bug 2152581."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        \"\"\""},{"line_number":154,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"316111f8_64b2c4aa","line":151,"range":{"start_line":150,"start_character":7,"end_line":151,"end_character":39},"updated":"2026-10-06 16:21:30.000000000","message":"i dont like this approch in general.\n\nas noted else where this is takign a local detection problem and making it a interface contract change which requries maitning yet anouther code path in an already complex area of the code.","commit_id":"7d8ac0e122db8ef9d364f636cc1f5a734a2c8ee2"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"42e9e2c04621958c68fe4d30eef1e773a4db0692","unresolved":true,"context_lines":[{"line_number":147,"context_line":"        :base: Template name"},{"line_number":148,"context_line":"        :size: Size of created image in bytes"},{"line_number":149,"context_line":"        :safe: True if image contains a safe filesystem"},{"line_number":150,"context_line":"        :force: If True, skip existence checks and always create the"},{"line_number":151,"context_line":"                image. See bug 2152581."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        \"\"\""},{"line_number":154,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"ec16f8a5_5a268305","line":151,"range":{"start_line":150,"start_character":7,"end_line":151,"end_character":39},"in_reply_to":"0bcd5267_330b607b","updated":"2026-10-08 17:38:33.000000000","message":"Agree with Sean. To me this feels like adding a \"don\u0027t hit my bug\" flag. Doing that in something as complex as imagebackend where it affects bascially everything makes it very unpalatable to me.\n\nThe commit message mentions that the original attempt to fix this without fixing it... didn\u0027t fix it. That\u0027s probably a good indication that another bandage is not the right path.\n\n\u003e Do you think it would be backportable?\n\nWhy would it not be backportable? Like, what specifically concerns you about backporting that (over say this). Even if it\u0027s not backportable for some reason, we would definitely not want to do something as serious as changing an API like you\u0027re doing here, only to fix it properly in master only, IMHO.\n\nAFAIK the backing file for swap/ephemeral thing was a super old legacy xen and windows thing that allowed operators to put an empty filesystem there to avoid booting with unknown disk types for operating systems that get confused about such things. I don\u0027t think there\u0027s really any technical reason we haven\u0027t done the right thing other than having a compelling reason to get it done. Seems like you\u0027ve found one :)","commit_id":"7d8ac0e122db8ef9d364f636cc1f5a734a2c8ee2"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"b5d4db1278e56c3ec87826cb74cf631e1e2441c7","unresolved":true,"context_lines":[{"line_number":147,"context_line":"        :base: Template name"},{"line_number":148,"context_line":"        :size: Size of created image in bytes"},{"line_number":149,"context_line":"        :safe: True if image contains a safe filesystem"},{"line_number":150,"context_line":"        :force: If True, skip existence checks and always create the"},{"line_number":151,"context_line":"                image. See bug 2152581."},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"        \"\"\""},{"line_number":154,"context_line":"        pass"}],"source_content_type":"text/x-python","patch_set":2,"id":"0bcd5267_330b607b","line":151,"range":{"start_line":150,"start_character":7,"end_line":151,"end_character":39},"in_reply_to":"316111f8_64b2c4aa","updated":"2026-10-08 17:07:35.000000000","message":"Thanks for the detailed feedback Sean. I acknowledge the patch is a bit rough around the edges, my goal was primarily to validate the approach before investing more time into it.\n\nI understand that not using backing files for swap disks would be a cleaner solution. However, I\u0027m not sure I fully grasp the scope of that change. I imagine it could be fairly significant. I\u0027m happy to go in that direction, but given that it\u0027s been discussed for years without being done, I suspect it\u0027s not a straightforward change. Do you think it would be backportable? I\u0027d appreciate your thoughts on how you\u0027d approach this.","commit_id":"7d8ac0e122db8ef9d364f636cc1f5a734a2c8ee2"}],"releasenotes/notes/bug-2152581-nfs-swap-cold-migration-a1b2c3d4e5f6g7h8.yaml":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"e8268af266a310bc273a5aaf469cb38f6fd9305c","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    `Bug #2152581`_: Fixed swap disk creation being skipped during resize"},{"line_number":5,"context_line":"    or cold migration when the instance directory is on NFS shared storage."},{"line_number":6,"context_line":"    The previous fix attempted to invalidate the NFS attribute cache from"},{"line_number":7,"context_line":"    userspace but was found to be unreliable depending on NFS version and"},{"line_number":8,"context_line":"    mount options. The new approach bypasses the existence check entirely"},{"line_number":9,"context_line":"    for swap disks during migration, since swap is always recreated from"},{"line_number":10,"context_line":"    scratch and never copied."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    .. _Bug #2152581: https://bugs.launchpad.net/nova/+bug/2152581"}],"source_content_type":"text/x-yaml","patch_set":2,"id":"e5bbb591_b810edb5","line":10,"range":{"start_line":6,"start_character":3,"end_line":10,"end_character":29},"updated":"2026-10-06 16:21:30.000000000","message":"we only update commit messages like this in two caes.\n\n1 where the update happens in the saem relese as the orgianl commit (not this case)\nor 2 when the orgianl statement is not matiraly wrong\n\nim not sure this is either.\n\nyou shoudl really create a second seprate release note and or file a sperate bug for this new patch.\n\ni think a new bug woudl actullly be cleaner in this case and you can refence the other one.","commit_id":"7d8ac0e122db8ef9d364f636cc1f5a734a2c8ee2"}]}
