)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":34859,"name":"Konrad Gube","email":"konrad.gube@cloudandheat.com","username":"kgube"},"change_message_id":"9ee7e7b5560fda87b161ae7618ff7b9e9ee93a5b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"4a2e81d1_d4c04bca","updated":"2025-11-12 13:23:01.000000000","message":"I\u0027m rewriting the spec in accordance to feedback I got at the PTG, so i\u0027m marking it WIP for now.","commit_id":"bf04b83797d4ac4a403e946d52603f0d8bc2e4ca"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"d8b23296b29705fb00f4b83c1f7d1d21bc8008b4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"a68354e6_e3c0f800","updated":"2026-01-08 15:54:23.000000000","message":"Small linting review and you need to fix the merge conflict","commit_id":"ad781330350f7f5152bf59e8932d45d4dab4c098"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"1781bf8563fe699c491113cb9951aeb6321224a0","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"1db419a8_9a7fd92b","updated":"2026-02-05 14:35:25.000000000","message":"Good from my side","commit_id":"eb4bf7d49ad9a5389ea4f379b96c1b5cf5fc29b1"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"bb98e53991485905aba0a4489c2f155a976e2d11","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"b5390bc7_5baab9c3","updated":"2026-05-21 15:51:48.000000000","message":"LGTM.","commit_id":"31241ec9ad6faaa95bc8110a6a103869e553f06d"}],"specs/2026.1/extend-volume-completion-action.rst":[{"author":{"_account_id":10058,"name":"Erlon R. Cruz","email":"erlon.rodrigues.cruz@canonical.com","username":"sombrafam"},"change_message_id":"126ecd9f988c930e0d084a790244a08f46fa0bb4","unresolved":true,"context_lines":[{"line_number":54,"context_line":"A previously approved version of this spec [2]_ and its accompanying nova-spec"},{"line_number":55,"context_line":"[3]_ proposed to update the handling of the ``volume-extended`` event to allow"},{"line_number":56,"context_line":"this use-case."},{"line_number":57,"context_line":"This approach has now been abandoned due to concerns by the Nova team about"},{"line_number":58,"context_line":"using the external event API to start potentially long-running operations."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Since the previous specs were already partially implemented, we will try to"},{"line_number":61,"context_line":"reuse the previously merged code where possible."}],"source_content_type":"text/x-rst","patch_set":6,"id":"af6020ac_f84d48fa","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":74},"updated":"2025-12-10 14:30:23.000000000","message":"What potentially long-running operations where mentioned in the discussions? Is that in Cinder or Nova?","commit_id":"ad781330350f7f5152bf59e8932d45d4dab4c098"},{"author":{"_account_id":34859,"name":"Konrad Gube","email":"konrad.gube@cloudandheat.com","username":"kgube"},"change_message_id":"27b6cf586f16dc789cba87566bb9c199fd2c7fe7","unresolved":true,"context_lines":[{"line_number":54,"context_line":"A previously approved version of this spec [2]_ and its accompanying nova-spec"},{"line_number":55,"context_line":"[3]_ proposed to update the handling of the ``volume-extended`` event to allow"},{"line_number":56,"context_line":"this use-case."},{"line_number":57,"context_line":"This approach has now been abandoned due to concerns by the Nova team about"},{"line_number":58,"context_line":"using the external event API to start potentially long-running operations."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"Since the previous specs were already partially implemented, we will try to"},{"line_number":61,"context_line":"reuse the previously merged code where possible."}],"source_content_type":"text/x-rst","patch_set":6,"id":"ae0e21e6_097f43ae","line":58,"range":{"start_line":57,"start_character":0,"end_line":58,"end_character":74},"in_reply_to":"af6020ac_f84d48fa","updated":"2025-12-11 11:12:00.000000000","message":"This is in regard to the qemu block-resize command, so it\u0027s about nova-compute.\n\nIf the volume file has previously been extended, this will be an instantaneous operation. If it has not, then the `block-resize` command may involve filling the newly allocated space in the extended volume with zeros, which may take some time.\n\nUsually this will not be a problem, because current NFS and practically all file systems that would be used for the backend storage have support for sparse files.\nBut it\u0027s not something we can guarantee, so the Nova team said it shouldn\u0027t be handled by an external server event.","commit_id":"ad781330350f7f5152bf59e8932d45d4dab4c098"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"d8b23296b29705fb00f4b83c1f7d1d21bc8008b4","unresolved":true,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"What is still needed in Cinder is a method for volume drivers to cause the"},{"line_number":70,"context_line":"volume manager to call ``assisted-volume-extend`` and defer the finalization"},{"line_number":71,"context_line":"of the extend operation to the ``ch-extend_volume_completion`` callback."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"ch-extend_volume_completion"}],"source_content_type":"text/x-rst","patch_set":6,"id":"890e7da0_3e70368b","line":71,"range":{"start_line":71,"start_character":33,"end_line":71,"end_character":60},"updated":"2026-01-08 15:54:23.000000000","message":"be consistent - you use hyphen in most other places, not underscore","commit_id":"ad781330350f7f5152bf59e8932d45d4dab4c098"},{"author":{"_account_id":34859,"name":"Konrad Gube","email":"konrad.gube@cloudandheat.com","username":"kgube"},"change_message_id":"21f93806e77f62cf6fde960d3a0787c97b2ba8eb","unresolved":true,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"What is still needed in Cinder is a method for volume drivers to cause the"},{"line_number":70,"context_line":"volume manager to call ``assisted-volume-extend`` and defer the finalization"},{"line_number":71,"context_line":"of the extend operation to the ``ch-extend_volume_completion`` callback."},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"ch-extend_volume_completion"}],"source_content_type":"text/x-rst","patch_set":6,"id":"9951e38e_c7561c14","line":71,"range":{"start_line":71,"start_character":33,"end_line":71,"end_character":60},"in_reply_to":"890e7da0_3e70368b","updated":"2026-01-12 14:38:29.000000000","message":"I know it\u0027s not pretty, but this is the established format for volume actions, see e.g. [1] or [2].\n(Also, the `ch-extend_volume_completion` action has already been merged: [3])\n\n[1] https://github.com/openstack/cinder/blob/master/api-ref/source/v3/samples/volume-status-reset-request.json\n[2] https://github.com/openstack/cinder/blob/master/api-ref/source/v3/samples/volume-os-migrate_volume_completion-request.json\n[3] https://review.opendev.org/c/openstack/openstacksdk/+/910522","commit_id":"ad781330350f7f5152bf59e8932d45d4dab4c098"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"d8b23296b29705fb00f4b83c1f7d1d21bc8008b4","unresolved":true,"context_lines":[{"line_number":77,"context_line":"The volume action was introduced in microversion 3.71 [5]_ and is supported by"},{"line_number":78,"context_line":"both ``python-cinderclient`` and ``openstacksdk``."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Modelled after the existing ``ch-migrate_volume_completion``, the body of the"},{"line_number":81,"context_line":"action contains a boolean parameter, ``error``, which is used to indicate an"},{"line_number":82,"context_line":"failure of nova-compute to extend the volume."},{"line_number":83,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"576dc10f_c77eec98","line":80,"range":{"start_line":80,"start_character":33,"end_line":80,"end_character":58},"updated":"2026-01-08 15:54:23.000000000","message":"underscore or hyphen - be consistent","commit_id":"ad781330350f7f5152bf59e8932d45d4dab4c098"},{"author":{"_account_id":34859,"name":"Konrad Gube","email":"konrad.gube@cloudandheat.com","username":"kgube"},"change_message_id":"21f93806e77f62cf6fde960d3a0787c97b2ba8eb","unresolved":true,"context_lines":[{"line_number":77,"context_line":"The volume action was introduced in microversion 3.71 [5]_ and is supported by"},{"line_number":78,"context_line":"both ``python-cinderclient`` and ``openstacksdk``."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Modelled after the existing ``ch-migrate_volume_completion``, the body of the"},{"line_number":81,"context_line":"action contains a boolean parameter, ``error``, which is used to indicate an"},{"line_number":82,"context_line":"failure of nova-compute to extend the volume."},{"line_number":83,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"2e1e49a2_48bbcbaa","line":80,"range":{"start_line":80,"start_character":33,"end_line":80,"end_character":58},"in_reply_to":"576dc10f_c77eec98","updated":"2026-01-12 14:38:29.000000000","message":"see above","commit_id":"ad781330350f7f5152bf59e8932d45d4dab4c098"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"d8b23296b29705fb00f4b83c1f7d1d21bc8008b4","unresolved":true,"context_lines":[{"line_number":78,"context_line":"both ``python-cinderclient`` and ``openstacksdk``."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Modelled after the existing ``ch-migrate_volume_completion``, the body of the"},{"line_number":81,"context_line":"action contains a boolean parameter, ``error``, which is used to indicate an"},{"line_number":82,"context_line":"failure of nova-compute to extend the volume."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Its handler in the API removes the two keys keys ``extend_reservations`` and"}],"source_content_type":"text/x-rst","patch_set":6,"id":"6bb03520_1ebb3e19","line":81,"range":{"start_line":81,"start_character":74,"end_line":81,"end_character":76},"updated":"2026-01-08 15:54:23.000000000","message":"nit: a","commit_id":"ad781330350f7f5152bf59e8932d45d4dab4c098"},{"author":{"_account_id":34859,"name":"Konrad Gube","email":"konrad.gube@cloudandheat.com","username":"kgube"},"change_message_id":"21f93806e77f62cf6fde960d3a0787c97b2ba8eb","unresolved":false,"context_lines":[{"line_number":78,"context_line":"both ``python-cinderclient`` and ``openstacksdk``."},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"Modelled after the existing ``ch-migrate_volume_completion``, the body of the"},{"line_number":81,"context_line":"action contains a boolean parameter, ``error``, which is used to indicate an"},{"line_number":82,"context_line":"failure of nova-compute to extend the volume."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Its handler in the API removes the two keys keys ``extend_reservations`` and"}],"source_content_type":"text/x-rst","patch_set":6,"id":"2c28732f_44e91a63","line":81,"range":{"start_line":81,"start_character":74,"end_line":81,"end_character":76},"in_reply_to":"6bb03520_1ebb3e19","updated":"2026-01-12 14:38:29.000000000","message":"Done","commit_id":"ad781330350f7f5152bf59e8932d45d4dab4c098"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"d8b23296b29705fb00f4b83c1f7d1d21bc8008b4","unresolved":true,"context_lines":[{"line_number":81,"context_line":"action contains a boolean parameter, ``error``, which is used to indicate an"},{"line_number":82,"context_line":"failure of nova-compute to extend the volume."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Its handler in the API removes the two keys keys ``extend_reservations`` and"},{"line_number":85,"context_line":"``extend_new_size`` from the volume\u0027s admin metadata, but passes their values"},{"line_number":86,"context_line":"along with the error status to the ``VolumeManager.extend_volume_completion``"},{"line_number":87,"context_line":"RPC-method:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"e3d834d9_1d94db90","line":84,"range":{"start_line":84,"start_character":44,"end_line":84,"end_character":49},"updated":"2026-01-08 15:54:23.000000000","message":"nit: remove duplicate","commit_id":"ad781330350f7f5152bf59e8932d45d4dab4c098"},{"author":{"_account_id":34859,"name":"Konrad Gube","email":"konrad.gube@cloudandheat.com","username":"kgube"},"change_message_id":"21f93806e77f62cf6fde960d3a0787c97b2ba8eb","unresolved":false,"context_lines":[{"line_number":81,"context_line":"action contains a boolean parameter, ``error``, which is used to indicate an"},{"line_number":82,"context_line":"failure of nova-compute to extend the volume."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"Its handler in the API removes the two keys keys ``extend_reservations`` and"},{"line_number":85,"context_line":"``extend_new_size`` from the volume\u0027s admin metadata, but passes their values"},{"line_number":86,"context_line":"along with the error status to the ``VolumeManager.extend_volume_completion``"},{"line_number":87,"context_line":"RPC-method:"}],"source_content_type":"text/x-rst","patch_set":6,"id":"0ad8f86c_2f4b2191","line":84,"range":{"start_line":84,"start_character":44,"end_line":84,"end_character":49},"in_reply_to":"e3d834d9_1d94db90","updated":"2026-01-12 14:38:29.000000000","message":"Done","commit_id":"ad781330350f7f5152bf59e8932d45d4dab4c098"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"d8b23296b29705fb00f4b83c1f7d1d21bc8008b4","unresolved":true,"context_lines":[{"line_number":154,"context_line":"drivers that previously supported it."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"To support remotefs-based drivers that have to rely on Nova for online extend,"},{"line_number":157,"context_line":"two aditional cases will be handled:"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"* If the driver notifies the volume manager that a response from Nova is"},{"line_number":160,"context_line":"  required, but the volume is not attached, it will be handled as failure and"}],"source_content_type":"text/x-rst","patch_set":6,"id":"4b2a0383_d8fdbfe6","line":157,"range":{"start_line":157,"start_character":4,"end_line":157,"end_character":14},"updated":"2026-01-08 15:54:23.000000000","message":"nit: additional","commit_id":"ad781330350f7f5152bf59e8932d45d4dab4c098"},{"author":{"_account_id":34859,"name":"Konrad Gube","email":"konrad.gube@cloudandheat.com","username":"kgube"},"change_message_id":"21f93806e77f62cf6fde960d3a0787c97b2ba8eb","unresolved":false,"context_lines":[{"line_number":154,"context_line":"drivers that previously supported it."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"To support remotefs-based drivers that have to rely on Nova for online extend,"},{"line_number":157,"context_line":"two aditional cases will be handled:"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"* If the driver notifies the volume manager that a response from Nova is"},{"line_number":160,"context_line":"  required, but the volume is not attached, it will be handled as failure and"}],"source_content_type":"text/x-rst","patch_set":6,"id":"83957b00_02a89270","line":157,"range":{"start_line":157,"start_character":4,"end_line":157,"end_character":14},"in_reply_to":"4b2a0383_d8fdbfe6","updated":"2026-01-12 14:38:29.000000000","message":"Done","commit_id":"ad781330350f7f5152bf59e8932d45d4dab4c098"},{"author":{"_account_id":13425,"name":"Simon Dodsley","email":"simon@purestorage.com","username":"sdodsley"},"change_message_id":"d8b23296b29705fb00f4b83c1f7d1d21bc8008b4","unresolved":true,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"* The ``volume-extended`` event will generate ``volume-extended`` entries in"},{"line_number":242,"context_line":"  Nova\u0027s instance action log, on start, success, or failure of the operation."},{"line_number":243,"context_line":"  The newly proposed ``assisted-volume-extend`` API [4]_ will also generate"},{"line_number":244,"context_line":"  those entries."},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"  Instead of waiting for a callback to ``ch-extend_volume_completion`` and"}],"source_content_type":"text/x-rst","patch_set":6,"id":"a08c133c_19e87c17","line":243,"range":{"start_line":243,"start_character":6,"end_line":243,"end_character":12},"updated":"2026-01-08 15:54:23.000000000","message":"remove word","commit_id":"ad781330350f7f5152bf59e8932d45d4dab4c098"},{"author":{"_account_id":34859,"name":"Konrad Gube","email":"konrad.gube@cloudandheat.com","username":"kgube"},"change_message_id":"21f93806e77f62cf6fde960d3a0787c97b2ba8eb","unresolved":false,"context_lines":[{"line_number":240,"context_line":""},{"line_number":241,"context_line":"* The ``volume-extended`` event will generate ``volume-extended`` entries in"},{"line_number":242,"context_line":"  Nova\u0027s instance action log, on start, success, or failure of the operation."},{"line_number":243,"context_line":"  The newly proposed ``assisted-volume-extend`` API [4]_ will also generate"},{"line_number":244,"context_line":"  those entries."},{"line_number":245,"context_line":""},{"line_number":246,"context_line":"  Instead of waiting for a callback to ``ch-extend_volume_completion`` and"}],"source_content_type":"text/x-rst","patch_set":6,"id":"ee099656_f04825e2","line":243,"range":{"start_line":243,"start_character":6,"end_line":243,"end_character":12},"in_reply_to":"a08c133c_19e87c17","updated":"2026-01-12 14:38:29.000000000","message":"Done","commit_id":"ad781330350f7f5152bf59e8932d45d4dab4c098"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"06429771475826b501b52c7dd836bca74d8e377b","unresolved":true,"context_lines":[{"line_number":91,"context_line":"    def extend_volume_completion(self,"},{"line_number":92,"context_line":"                                 context: context.RequestContext,"},{"line_number":93,"context_line":"                                 volume: objects.Volume,"},{"line_number":94,"context_line":"                                 new_size: int,"},{"line_number":95,"context_line":"                                 reservations: list[str],"},{"line_number":96,"context_line":"                                 error: bool) -\u003e None:"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"d288d9ca_4873fbeb","line":94,"updated":"2026-04-15 14:46:48.000000000","message":"Can new_size be \u003c current Volume size? Will shrinking be supported?","commit_id":"eb4bf7d49ad9a5389ea4f379b96c1b5cf5fc29b1"},{"author":{"_account_id":38059,"name":"Anoop Kumar Shukla","display_name":"Anoop Shukla","email":"anoop.shukla@netapp.com","username":"anoop2","status":"NetApp"},"change_message_id":"bb98e53991485905aba0a4489c2f155a976e2d11","unresolved":true,"context_lines":[{"line_number":91,"context_line":"    def extend_volume_completion(self,"},{"line_number":92,"context_line":"                                 context: context.RequestContext,"},{"line_number":93,"context_line":"                                 volume: objects.Volume,"},{"line_number":94,"context_line":"                                 new_size: int,"},{"line_number":95,"context_line":"                                 reservations: list[str],"},{"line_number":96,"context_line":"                                 error: bool) -\u003e None:"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"55a61b4c_f440dcd2","line":94,"in_reply_to":"903953f6_187a8d4c","updated":"2026-05-21 15:51:48.000000000","message":"Okay thats good.","commit_id":"eb4bf7d49ad9a5389ea4f379b96c1b5cf5fc29b1"},{"author":{"_account_id":34859,"name":"Konrad Gube","email":"konrad.gube@cloudandheat.com","username":"kgube"},"change_message_id":"a16b5eb727d83ba70b17bf66296ee9a0792c787a","unresolved":true,"context_lines":[{"line_number":91,"context_line":"    def extend_volume_completion(self,"},{"line_number":92,"context_line":"                                 context: context.RequestContext,"},{"line_number":93,"context_line":"                                 volume: objects.Volume,"},{"line_number":94,"context_line":"                                 new_size: int,"},{"line_number":95,"context_line":"                                 reservations: list[str],"},{"line_number":96,"context_line":"                                 error: bool) -\u003e None:"},{"line_number":97,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"903953f6_187a8d4c","line":94,"in_reply_to":"d288d9ca_4873fbeb","updated":"2026-05-13 13:47:08.000000000","message":"Unfortunately not.\nWhile I believe that libvirt actually allows this, it is not supported by either Cinder or Nova.","commit_id":"eb4bf7d49ad9a5389ea4f379b96c1b5cf5fc29b1"}]}
