)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f379aa5e0846155775958179abe850eada90a081","unresolved":true,"context_lines":[{"line_number":18,"context_line":"Nova currently starts the block copy job without specifying a bandwidth"},{"line_number":19,"context_line":"limit. Libvirt therefore performs the copy with unlimited bandwidth."},{"line_number":20,"context_line":"A large volume migration can consume the available storage or network"},{"line_number":21,"context_line":"bandwidth and affect I/O from other instances on the compute host."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Add the [libvirt] volume_migration_bandwidth option so operators can"},{"line_number":24,"context_line":"configure a default bandwidth limit for these block copy jobs. The"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"a07f96f9_dfdd0551","line":21,"updated":"2026-09-30 21:07:36.000000000","message":"im not sure that nova shoudl be the one to set the limit here, i woudl at least want to get cidner input first since they may want to model that as a atirbute of the volume type or storage backend rather then havign to confirue this on every compute node.\n\nim not against this in principle since we do have limits on live migration bandwith\n\nhttps://docs.openstack.org/nova/latest/configuration/config.html#libvirt.live_migration_bandwidth\n\nbut we do not have a limti on nova creating volumes form glance iamges for example.\n\nin that flow we copy the glance image to our image cache, convert it to raw write the data to the volume either as a local block deivce or remotebly via rbd.\n\nso this feel more natural to me to enfoce either via cinder qos (applying qos rate limits to the migraiton) or via information in the swap volume call form cidner.\n\n\ncidner seam to contol this via cgroups limtis\n\n```\n# The blkio cgroup name to be used to limit bandwidth of volume copy (string\n# value)\n#volume_copy_blkio_cgroup_name \u003d cinder-volume-copy\n\n# The upper limit of bandwidth of volume copy. 0 \u003d\u003e unlimited (integer value)\n#volume_copy_bps_limit \u003d 0\n```\n\nhttps://docs.openstack.org/cinder/latest/configuration/block-storage/samples/cinder.conf.html\n\n\npresuably so tha tthey can fonigure a single cgroup limit for all copy operation that will be shared and manage by the kernel\n\nthey alos have some vendor specifc limtis\n```\n# Upper limit for bandwidth in B/s per GB. (integer value)\n#kioxia_max_bw_per_gb \u003d 0\n\n# Desired bandwidth in B/s per GB. (integer value)\n#kioxia_desired_bw_per_gb \u003d 0\n```\nso again wonder fi this is a limit that cinder should pass to naova and then nova can implemtn when swap volume is requested.","commit_id":"77ea56d3087dc564fa0a5930af620e919e75c00d"},{"author":{"_account_id":34539,"name":"minwoo seo","email":"alsdn1211@naver.com","username":"minwooseo"},"change_message_id":"207c30845677c1074b5a58581f246cd3c231541b","unresolved":false,"context_lines":[{"line_number":18,"context_line":"Nova currently starts the block copy job without specifying a bandwidth"},{"line_number":19,"context_line":"limit. Libvirt therefore performs the copy with unlimited bandwidth."},{"line_number":20,"context_line":"A large volume migration can consume the available storage or network"},{"line_number":21,"context_line":"bandwidth and affect I/O from other instances on the compute host."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Add the [libvirt] volume_migration_bandwidth option so operators can"},{"line_number":24,"context_line":"configure a default bandwidth limit for these block copy jobs. The"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"3a251977_89849b53","line":21,"in_reply_to":"a07f96f9_dfdd0551","updated":"2026-10-12 07:42:36.000000000","message":"Thanks for the feedback. Let me clarify the intent first.\n\nThe case this change targets is retyping a volume attached to a running instance to move it to a different backend. In that path, Cinder delegates the copy to Nova, and the data is copied by a QEMU block-copy job on the compute node. Cinder\u0027s `volume_copy_bps_limit` only applies to copies performed by cinder-volume itself, so there is currently no OpenStack setting that limits this copy on its own.\n\nWhat I want to limit is not the volume itself, but the load the copy puts on that compute node\u0027s network and storage paths. It is the same reason operators throttle backups or large file transfers, and since path capacity and workload differ between compute nodes, I made it a per-compute setting.\n\nHaving Cinder pass a limit per retype could also make sense. It doesn\u0027t conflict with this change, though, so if needed we could discuss it as a follow-up and decide how the two values interact at that point.","commit_id":"77ea56d3087dc564fa0a5930af620e919e75c00d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f379aa5e0846155775958179abe850eada90a081","unresolved":true,"context_lines":[{"line_number":37,"context_line":"API or CLI override."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"DocImpact"},{"line_number":40,"context_line":"Implements: blueprint libvirt-volume-migration-bandwidth"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Change-Id: Ic8c58c25f5ff84d88338aa6f59739d9e1ff8dcc5"},{"line_number":43,"context_line":"Signed-off-by: minwooseo \u003calsdn1211@naver.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"dea48149_cb42ce7c","line":40,"updated":"2026-09-30 21:07:36.000000000","message":"this needs to be appoved as a specless blueprit\nor have an assocated spec before it proceeds further.","commit_id":"77ea56d3087dc564fa0a5930af620e919e75c00d"},{"author":{"_account_id":34539,"name":"minwoo seo","email":"alsdn1211@naver.com","username":"minwooseo"},"change_message_id":"207c30845677c1074b5a58581f246cd3c231541b","unresolved":false,"context_lines":[{"line_number":37,"context_line":"API or CLI override."},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"DocImpact"},{"line_number":40,"context_line":"Implements: blueprint libvirt-volume-migration-bandwidth"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"Change-Id: Ic8c58c25f5ff84d88338aa6f59739d9e1ff8dcc5"},{"line_number":43,"context_line":"Signed-off-by: minwooseo \u003calsdn1211@naver.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"73456f33_aef2dfc8","line":40,"in_reply_to":"dea48149_cb42ce7c","updated":"2026-10-12 07:42:36.000000000","message":"The blueprint is registered at https://blueprints.launchpad.net/nova/+spec/libvirt-volume-migration-bandwidth. Since the change is just a single config option, I didn\u0027t write a spec. Should I write one as well?","commit_id":"77ea56d3087dc564fa0a5930af620e919e75c00d"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":34539,"name":"minwoo seo","email":"alsdn1211@naver.com","username":"minwooseo"},"change_message_id":"4519f38f19f780bb2276ffb019c2987eefd4db3a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"56391712_73cdc156","updated":"2026-08-07 04:16:06.000000000","message":"recheck","commit_id":"df681850d96aac71cde96d0240af8a32015f1ef9"},{"author":{"_account_id":34539,"name":"minwoo seo","email":"alsdn1211@naver.com","username":"minwooseo"},"change_message_id":"97ccbb4eff83ab822cc7d311c93b92ec0d2c7770","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"bbe04c26_b7cbd8fd","updated":"2026-08-07 00:38:24.000000000","message":"recheck","commit_id":"df681850d96aac71cde96d0240af8a32015f1ef9"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"f379aa5e0846155775958179abe850eada90a081","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"2d4a10fa_1fd053da","updated":"2026-09-30 21:07:36.000000000","message":"while this is a simple solution im not sure its correct\nthere is also a security element to this.\n\nif the reason to implement this limit is to mitigate the impact on stroage performance to prevent a unbleived user form initiating  may volume retypes then\nthat is has security implications that probably deserves grater tought.\n\nhas this been raised with the cider team or vmt.\n\nmy inlication is to say if a volume-type has qos defined for the volume we sould repect that dring assited volume migration as well and perhaps have a nova cofnig option as a fall back,\n\n\nto me enforceing limtis is different then reimage_timeout_per_gb for an example which esits to allow you to tell nova about the performace of the storage backedn\n\nhttps://docs.openstack.org/nova/latest/configuration/config.html#DEFAULT.reimage_timeout_per_gb\n\nas noted it would be in keeping with \n\nhttps://docs.openstack.org/nova/latest/configuration/config.html#libvirt.live_migration_bandwidth\n\nhowever that is a limit on a nova managed resouce not a cinder manged one so its not quite the same.","commit_id":"77ea56d3087dc564fa0a5930af620e919e75c00d"},{"author":{"_account_id":34539,"name":"minwoo seo","email":"alsdn1211@naver.com","username":"minwooseo"},"change_message_id":"207c30845677c1074b5a58581f246cd3c231541b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"84017ad0_0a0390de","in_reply_to":"2d4a10fa_1fd053da","updated":"2026-10-12 07:42:36.000000000","message":"The goal is to control the load of normal, operator-driven backend migrations. It is not meant to prevent users from issuing excessive retype requests. The limit applies per copy job, so it doesn\u0027t cap the host\u0027s aggregate bandwidth or the number of concurrent jobs. I haven\u0027t raised this with Cinder or VMT yet.\n\nThis doesn\u0027t change any existing volume QoS settings. Typical front-end QoS applies to guest I/O and works separately from the background copy rate. Even when back-end QoS limits both kinds of I/O together, this option can still keep the copy lower within that limit, reducing contention with service I/O.","commit_id":"77ea56d3087dc564fa0a5930af620e919e75c00d"}],"nova/virt/libvirt/guest.py":[{"author":{"_account_id":9816,"name":"Takashi Kajinami","email":"kajinamit@oss.nttdata.com","username":"kajinamit"},"change_message_id":"890e4354eb30d560ee0c31fe7d9be61e1df3901d","unresolved":true,"context_lines":[{"line_number":790,"context_line":"        flags |\u003d reuse_ext and libvirt.VIR_DOMAIN_BLOCK_COPY_REUSE_EXT or 0"},{"line_number":791,"context_line":"        flags |\u003d transient and libvirt.VIR_DOMAIN_BLOCK_COPY_TRANSIENT_JOB or 0"},{"line_number":792,"context_line":"        if bandwidth:"},{"line_number":793,"context_line":"            params \u003d {\u0027bandwidth\u0027: bandwidth}"},{"line_number":794,"context_line":"            return self._guest._domain.blockCopy("},{"line_number":795,"context_line":"                self._disk, dest_xml, params\u003dparams, flags\u003dflags)"},{"line_number":796,"context_line":"        return self._guest._domain.blockCopy(self._disk, dest_xml, flags\u003dflags)"}],"source_content_type":"text/x-python","patch_set":2,"id":"6d2e5e1e_699a47fc","line":793,"range":{"start_line":793,"start_character":12,"end_line":793,"end_character":45},"updated":"2026-08-06 10:00:12.000000000","message":"Maybe you can pass params\u003dNone if not required, to squash call of blockCopy ?","commit_id":"e4752381859552235c669b8688b7bfab6e8083b3"},{"author":{"_account_id":34539,"name":"minwoo seo","email":"alsdn1211@naver.com","username":"minwooseo"},"change_message_id":"1fce6b98638bcc18c8881616f8ba8b67b6b24c76","unresolved":false,"context_lines":[{"line_number":790,"context_line":"        flags |\u003d reuse_ext and libvirt.VIR_DOMAIN_BLOCK_COPY_REUSE_EXT or 0"},{"line_number":791,"context_line":"        flags |\u003d transient and libvirt.VIR_DOMAIN_BLOCK_COPY_TRANSIENT_JOB or 0"},{"line_number":792,"context_line":"        if bandwidth:"},{"line_number":793,"context_line":"            params \u003d {\u0027bandwidth\u0027: bandwidth}"},{"line_number":794,"context_line":"            return self._guest._domain.blockCopy("},{"line_number":795,"context_line":"                self._disk, dest_xml, params\u003dparams, flags\u003dflags)"},{"line_number":796,"context_line":"        return self._guest._domain.blockCopy(self._disk, dest_xml, flags\u003dflags)"}],"source_content_type":"text/x-python","patch_set":2,"id":"9a66e7c8_fb402ad9","line":793,"range":{"start_line":793,"start_character":12,"end_line":793,"end_character":45},"in_reply_to":"6d2e5e1e_699a47fc","updated":"2026-08-06 13:28:14.000000000","message":"Thanks for the suggestion. I agree and have updated the implementation accordingly, along with the corresponding test case.","commit_id":"e4752381859552235c669b8688b7bfab6e8083b3"}]}
