)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":37888,"name":"Akshay Ranade","display_name":"Akshay Ranade","email":"akshay.ranade@ibm.com","username":"rakshay"},"change_message_id":"be7ae116c9511bb74d4c4edd7a78c926d6245ff4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"bef9f708_710938e4","updated":"2026-01-16 15:42:58.000000000","message":"If volume.group_id is present but the group type is not a CG-snapshot type, the code currently skips the add_member call. Since the volume still belongs to a group_id in Cinder, how is the backend kept in sync?","commit_id":"0e832ae5017955fac96341ab844f2b64dd2ba22e"},{"author":{"_account_id":36538,"name":"Harsh Ailani","display_name":"Harsh Ailani","email":"harsh.ailani@ibm.com","username":"harshailani"},"change_message_id":"2328ae747ffc84c0a9a875bde14d906cc8869898","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f11cb31b_63bd5ca3","updated":"2026-01-16 14:15:19.000000000","message":"Minor comments. Otherwise code logic looks good.","commit_id":"0e832ae5017955fac96341ab844f2b64dd2ba22e"},{"author":{"_account_id":35075,"name":"Alexander Deiter","email":"adeiter@infinidat.com","username":"adeiter"},"change_message_id":"75f53edae47b82e3738354e6df9768813ac044a7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"92403126_90b86305","in_reply_to":"f11cb31b_63bd5ca3","updated":"2026-03-13 14:57:51.000000000","message":"Hello Harsh,\n\nThank you very much for the review!\n\n\u003e Minor comments. Otherwise code logic looks good.\n\nThank you and have a nice day!","commit_id":"0e832ae5017955fac96341ab844f2b64dd2ba22e"},{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"9fce1331a48287dee0a4bed0222d1a067f257e08","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7d3a009b_62159eea","updated":"2026-04-01 12:34:39.000000000","message":"thnx for the update, lgtm","commit_id":"a7edbd50b0a45c84f41a4d71235087dce605ae0b"}],"cinder/volume/drivers/infinidat.py":[{"author":{"_account_id":13915,"name":"Silvan Kaiser","email":"silvan@quobyte.com","username":"kaisers"},"change_message_id":"fe9370b70ad3f0845be25da298c937fc1be62b9e","unresolved":true,"context_lines":[{"line_number":180,"context_line":"        if pkg_version.parse(version) \u003c pkg_version.parse(\u0027250.0.0\u0027):"},{"line_number":181,"context_line":"            message \u003d (_(\u0027The installed version of the infinisdk Python \u0027"},{"line_number":182,"context_line":"                         \u0027library is out of date: %(version)s, please \u0027"},{"line_number":183,"context_line":"                         \u0027update it with: pip3 install -U infinisdk\u0027)"},{"line_number":184,"context_line":"                       % {\u0027version\u0027: version})"},{"line_number":185,"context_line":"            raise exception.VolumeDriverException(message\u003dmessage)"},{"line_number":186,"context_line":"        auth \u003d (self.configuration.san_login,"}],"source_content_type":"text/x-python","patch_set":1,"id":"dbd3b55a_e057f753","line":183,"range":{"start_line":183,"start_character":35,"end_line":183,"end_character":69},"updated":"2026-01-16 15:37:41.000000000","message":"I think it\u0027d better to hint to the required min version in this message than propose an update command.","commit_id":"0e832ae5017955fac96341ab844f2b64dd2ba22e"},{"author":{"_account_id":35075,"name":"Alexander Deiter","email":"adeiter@infinidat.com","username":"adeiter"},"change_message_id":"75f53edae47b82e3738354e6df9768813ac044a7","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        if pkg_version.parse(version) \u003c pkg_version.parse(\u0027250.0.0\u0027):"},{"line_number":181,"context_line":"            message \u003d (_(\u0027The installed version of the infinisdk Python \u0027"},{"line_number":182,"context_line":"                         \u0027library is out of date: %(version)s, please \u0027"},{"line_number":183,"context_line":"                         \u0027update it with: pip3 install -U infinisdk\u0027)"},{"line_number":184,"context_line":"                       % {\u0027version\u0027: version})"},{"line_number":185,"context_line":"            raise exception.VolumeDriverException(message\u003dmessage)"},{"line_number":186,"context_line":"        auth \u003d (self.configuration.san_login,"}],"source_content_type":"text/x-python","patch_set":1,"id":"c0517e08_e2433924","line":183,"range":{"start_line":183,"start_character":35,"end_line":183,"end_character":69},"in_reply_to":"dbd3b55a_e057f753","updated":"2026-03-13 14:57:51.000000000","message":"Hello Silvan,\n\nThank you very much for the review!\n\n\u003e I think it\u0027d better to hint to the required min version in this message than propose an update command.\n\nFixed in patch set #2\n\nThank you and have a nice day!","commit_id":"0e832ae5017955fac96341ab844f2b64dd2ba22e"},{"author":{"_account_id":36538,"name":"Harsh Ailani","display_name":"Harsh Ailani","email":"harsh.ailani@ibm.com","username":"harshailani"},"change_message_id":"2328ae747ffc84c0a9a875bde14d906cc8869898","unresolved":true,"context_lines":[{"line_number":733,"context_line":"            with self._attach_context(connection) as attach_info:"},{"line_number":734,"context_line":"                yield attach_info"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"    def _create_promoted_clone(self, volume, infinidat_parent):"},{"line_number":737,"context_line":"        name \u003d self._make_volume_name(volume)"},{"line_number":738,"context_line":"        LOG.debug(\u0027Creating cloned volume %s from %s\u0027,"},{"line_number":739,"context_line":"                  name, infinidat_parent.get_name())"}],"source_content_type":"text/x-python","patch_set":1,"id":"ca548a3d_d779c13b","line":736,"updated":"2026-01-16 14:15:19.000000000","message":"A docstring would be good here.","commit_id":"0e832ae5017955fac96341ab844f2b64dd2ba22e"},{"author":{"_account_id":35075,"name":"Alexander Deiter","email":"adeiter@infinidat.com","username":"adeiter"},"change_message_id":"75f53edae47b82e3738354e6df9768813ac044a7","unresolved":false,"context_lines":[{"line_number":733,"context_line":"            with self._attach_context(connection) as attach_info:"},{"line_number":734,"context_line":"                yield attach_info"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":"    def _create_promoted_clone(self, volume, infinidat_parent):"},{"line_number":737,"context_line":"        name \u003d self._make_volume_name(volume)"},{"line_number":738,"context_line":"        LOG.debug(\u0027Creating cloned volume %s from %s\u0027,"},{"line_number":739,"context_line":"                  name, infinidat_parent.get_name())"}],"source_content_type":"text/x-python","patch_set":1,"id":"2382f976_081cde30","line":736,"in_reply_to":"ca548a3d_d779c13b","updated":"2026-03-13 14:57:51.000000000","message":"Hello Harsh,\n\nThank you very much for the review!\n\n\u003e A docstring would be good here.\n\nFixed in patch set #2\n\nThank you and have a nice day!","commit_id":"0e832ae5017955fac96341ab844f2b64dd2ba22e"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"2e2add9f31876e8f98958fdd4d3e2776afb15e02","unresolved":true,"context_lines":[{"line_number":743,"context_line":"        infinidat_volume.promote_snapshot()"},{"line_number":744,"context_line":"        volume_size \u003d infinidat_volume.get_size()"},{"line_number":745,"context_line":"        if volume_size \u003c volume.size * capacity.GiB:"},{"line_number":746,"context_line":"            self.extend_volume(volume, volume.size)"},{"line_number":747,"context_line":"        self._set_qos(volume, infinidat_volume)"},{"line_number":748,"context_line":"        self._set_cinder_object_metadata(infinidat_volume, volume)"},{"line_number":749,"context_line":"        if volume.group_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dc0cfc60_e3799c38","line":746,"updated":"2026-02-20 15:16:10.000000000","message":"you are passing volume and volume.size to .Both new_size and volume.size reference the same Cinder volume object\u0027s size field (the requested clone size), so delta \u003d 0. The resize is a no-op.\n\ndef extend_volume(self, volume, new_size):\n    infinidat_volume \u003d self._get_infinidat_volume(volume)\n    delta \u003d (new_size - volume.size) * capacity.GiB   # (TARGET - TARGET) \u003d 0\n    infinidat_volume.resize(delta)","commit_id":"0e832ae5017955fac96341ab844f2b64dd2ba22e"},{"author":{"_account_id":35075,"name":"Alexander Deiter","email":"adeiter@infinidat.com","username":"adeiter"},"change_message_id":"75f53edae47b82e3738354e6df9768813ac044a7","unresolved":false,"context_lines":[{"line_number":743,"context_line":"        infinidat_volume.promote_snapshot()"},{"line_number":744,"context_line":"        volume_size \u003d infinidat_volume.get_size()"},{"line_number":745,"context_line":"        if volume_size \u003c volume.size * capacity.GiB:"},{"line_number":746,"context_line":"            self.extend_volume(volume, volume.size)"},{"line_number":747,"context_line":"        self._set_qos(volume, infinidat_volume)"},{"line_number":748,"context_line":"        self._set_cinder_object_metadata(infinidat_volume, volume)"},{"line_number":749,"context_line":"        if volume.group_id:"}],"source_content_type":"text/x-python","patch_set":1,"id":"eefb0579_1a4d3527","line":746,"in_reply_to":"dc0cfc60_e3799c38","updated":"2026-03-13 14:57:51.000000000","message":"Hello Jayaanand,\n\nThank you very much for the review!\n\n\u003e you are passing volume and volume.size to .Both new_size and volume.size reference the same Cinder volume object\u0027s size field (the requested clone size), so delta \u003d 0. The resize is a no-op.\n\u003e \n\u003e def extend_volume(self, volume, new_size):\n\u003e     infinidat_volume \u003d self._get_infinidat_volume(volume)\n\u003e     delta \u003d (new_size - volume.size) * capacity.GiB   # (TARGET - TARGET) \u003d 0\n\u003e     infinidat_volume.resize(delta)\n\n\nI double-checked this code path. \n\nIn our driver the `extend_volume()` implementation computes the resize delta using the actual backend volume size, not `volume.size` from the Cinder volume object:\n```\ndef extend_volume(self, volume, new_size):\n    infinidat_volume \u003d self._get_infinidat_volume(volume)\n    size_delta \u003d new_size * capacity.GiB - infinidat_volume.get_size()\n    infinidat_volume.resize(size_delta)\n```\n\nSo when `_create_promoted_clone()` calls:\n```\nself.extend_volume(volume, volume.size)\n```\n\nAnd `volume.size` represents the requested size of the new Cinder volume, while the current backend size is obtained via `infinidat_volume.get_size()`.\n\nIn the clone case the backend volume created via:\n```\ncreate_snapshot(..., write_protected\u003dFalse)\npromote_snapshot()\n```\n\nKeeps the source volume size. Therefore if a larger clone is requested, an extend operation is required.\n\nI also verified the behavior with additional debug logs. I just added some additional debug lines:\n```\n 680     @infinisdk_to_cinder_exceptions\n 681     def extend_volume(self, volume, new_size):\n 682         \"\"\"Extend the size of a volume.\"\"\"\n 683         infinidat_volume \u003d self._get_infinidat_volume(volume)\n 684         size_delta \u003d new_size * capacity.GiB - infinidat_volume.get_size()\n 685         LOG.debug(\u0027\u003d\u003e NOTES FOR 940236: extend_volume: delta \u003d %s\u0027, size_delta)\n 686         infinidat_volume.resize(size_delta)\n\n...\n\n 737     def _create_promoted_clone(self, volume, infinidat_parent):\n 738         name \u003d self._make_volume_name(volume)\n 739         LOG.debug(\u0027Creating cloned volume %s from %s\u0027,\n 740                   name, infinidat_parent.get_name())\n 741         infinidat_volume \u003d infinidat_parent.create_snapshot(\n 742             name\u003dname, write_protected\u003dFalse)\n 743         LOG.debug(\u0027Promote cloned volume %s\u0027, name)\n 744         infinidat_volume.promote_snapshot()\n 745         volume_size \u003d infinidat_volume.get_size()\n 746         LOG.debug(\u0027\u003d\u003e NOTES FOR 940236: create promote clone: Infinidat parent volume size: %s\u0027, infinidat_parent.get_size())\n 747         LOG.debug(\u0027\u003d\u003e NOTES FOR 940236: create promote clone: Infinidat cloned volume size: %s\u0027, infinidat_volume.get_size())\n 748         LOG.debug(\u0027\u003d\u003e NOTES FOR 940236: create promote clone: Cinder new volume size: %s\u0027, volume.size * capacity.GiB)\n 749         if volume_size \u003c volume.size * capacity.GiB:\n 750             LOG.debug(\u0027\u003d\u003e NOTES FOR 940236: create promote clone: we must extend Infinidat cloned volume from %s \u003d\u003e %s\u0027, volume_size, volume.size * capaci     ty.GiB)\n 751             self.extend_volume(volume, volume.size)\n 752         self._set_qos(volume, infinidat_volume)\n 753         self._set_cinder_object_metadata(infinidat_volume, volume)\n 754         if volume.group_id:\n 755             group \u003d volume_utils.group_get_by_id(volume.group_id)\n 756             if volume_utils.is_group_a_cg_snapshot_type(group):\n 757                 infinidat_group \u003d self._get_infinidat_cg(group)\n 758                 infinidat_group.add_member(infinidat_volume)\n```\n\nAnd then create a volume:\n```\n$ openstack volume create --size 1 volume\n\n$ openstack volume list\n+--------------------------------------+--------+-----------+------+-------------+\n| ID                                   | Name   | Status    | Size | Attached to |\n+--------------------------------------+--------+-----------+------+-------------+\n| d00a5df5-f438-47a6-99c9-1b5b3f78302a | volume | available |    1 |             |\n+--------------------------------------+--------+-----------+------+-------------+\n```\n\nAnd then create a clone from the volume:\n```\n$ openstack volume create --source  volume --size 2 clone\n\n$ openstack volume list\n+--------------------------------------+--------+-----------+------+-------------+\n| ID                                   | Name   | Status    | Size | Attached to |\n+--------------------------------------+--------+-----------+------+-------------+\n| 9cef9c0f-ac2b-40e0-a69e-d0609a0e3599 | clone  | available |    2 |             |\n| d00a5df5-f438-47a6-99c9-1b5b3f78302a | volume | available |    1 |             |\n+--------------------------------------+--------+-----------+------+-------------+\n```\n\nAnd then check the log file:\n```\nMar 11 11:59:31 node-1 cinder-volume[611370]: DEBUG cinder.volume.drivers.infinidat [None req-77fd91f3-c02d-4377-b27f-fa0d22556010 admin None]\n\u003d\u003e NOTES FOR 940236: create promote clone: Infinidat parent volume size: 1 GiB {{(pid\u003d611370) _create_promoted_clone /opt/stack/cinder/cinder/volume/drivers/infinidat.py:746}}\n\nMar 11 11:59:31 node-1 cinder-volume[611370]: DEBUG cinder.volume.drivers.infinidat [None req-77fd91f3-c02d-4377-b27f-fa0d22556010 admin None]\n\u003d\u003e NOTES FOR 940236: create promote clone: Infinidat cloned volume size: 1 GiB\n{{(pid\u003d611370) _create_promoted_clone /opt/stack/cinder/cinder/volume/drivers/infinidat.py:747}}\n\nMar 11 11:59:31 node-1 cinder-volume[611370]: DEBUG cinder.volume.drivers.infinidat [None req-77fd91f3-c02d-4377-b27f-fa0d22556010 admin None]\n\u003d\u003e NOTES FOR 940236: create promote clone: Cinder new volume size: 2 GiB\n{{(pid\u003d611370) _create_promoted_clone /opt/stack/cinder/cinder/volume/drivers/infinidat.py:748}}\n\nMar 11 11:59:31 node-1 cinder-volume[611370]: DEBUG cinder.volume.drivers.infinidat [None req-77fd91f3-c02d-4377-b27f-fa0d22556010 admin None]\n\u003d\u003e NOTES FOR 940236: create promote clone: we must extend Infinidat cloned volume from 1 GiB \u003d\u003e 2 GiB\n{{(pid\u003d611370) _create_promoted_clone /opt/stack/cinder/cinder/volume/drivers/infinidat.py:750}}\n\nMar 11 11:59:31 node-1 cinder-volume[611370]: DEBUG cinder.volume.drivers.infinidat [None req-77fd91f3-c02d-4377-b27f-fa0d22556010 admin None]\n\u003d\u003e NOTES FOR 940236: extend_volume: delta \u003d 1 GiB\n{{(pid\u003d611370) extend_volume /opt/stack/cinder/cinder/volume/drivers/infinidat.py:685}}\n```\n\nAs you can see the `resize` operation is not a no-op.\n\nThank you and have a nice day!","commit_id":"0e832ae5017955fac96341ab844f2b64dd2ba22e"},{"author":{"_account_id":36171,"name":"jayaanand borra","display_name":"jayaanand borra","email":"jayaanand.borra@netapp.com","username":"jayaanan","status":"netapp"},"change_message_id":"2e2add9f31876e8f98958fdd4d3e2776afb15e02","unresolved":true,"context_lines":[{"line_number":748,"context_line":"        self._set_cinder_object_metadata(infinidat_volume, volume)"},{"line_number":749,"context_line":"        if volume.group_id:"},{"line_number":750,"context_line":"            group \u003d volume_utils.group_get_by_id(volume.group_id)"},{"line_number":751,"context_line":"            if volume_utils.is_group_a_cg_snapshot_type(group):"},{"line_number":752,"context_line":"                infinidat_group \u003d self._get_infinidat_cg(group)"},{"line_number":753,"context_line":"                infinidat_group.add_member(infinidat_volume)"},{"line_number":754,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"0386c578_f954fd13","line":751,"updated":"2026-02-20 15:16:10.000000000","message":"older implementation has delete infinidat_volume.delete(). Missing in new implementation. Cleanup is not required?","commit_id":"0e832ae5017955fac96341ab844f2b64dd2ba22e"},{"author":{"_account_id":35075,"name":"Alexander Deiter","email":"adeiter@infinidat.com","username":"adeiter"},"change_message_id":"75f53edae47b82e3738354e6df9768813ac044a7","unresolved":false,"context_lines":[{"line_number":748,"context_line":"        self._set_cinder_object_metadata(infinidat_volume, volume)"},{"line_number":749,"context_line":"        if volume.group_id:"},{"line_number":750,"context_line":"            group \u003d volume_utils.group_get_by_id(volume.group_id)"},{"line_number":751,"context_line":"            if volume_utils.is_group_a_cg_snapshot_type(group):"},{"line_number":752,"context_line":"                infinidat_group \u003d self._get_infinidat_cg(group)"},{"line_number":753,"context_line":"                infinidat_group.add_member(infinidat_volume)"},{"line_number":754,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"fdc41ce5_08ff30a5","line":751,"in_reply_to":"0386c578_f954fd13","updated":"2026-03-13 14:57:51.000000000","message":"Hello Jayaanand,\n\nThank you very much for the review!\n\n\u003e older implementation has delete infinidat_volume.delete(). Missing in new implementation. Cleanup is not required?\n\nFixed in patch set #2\n\nThank you and have a nice day!","commit_id":"0e832ae5017955fac96341ab844f2b64dd2ba22e"},{"author":{"_account_id":37888,"name":"Akshay Ranade","display_name":"Akshay Ranade","email":"akshay.ranade@ibm.com","username":"rakshay"},"change_message_id":"5dfc29e8eaeec164d8aec7ec4f80227a0a2dca24","unresolved":true,"context_lines":[{"line_number":750,"context_line":"            group \u003d volume_utils.group_get_by_id(volume.group_id)"},{"line_number":751,"context_line":"            if volume_utils.is_group_a_cg_snapshot_type(group):"},{"line_number":752,"context_line":"                infinidat_group \u003d self._get_infinidat_cg(group)"},{"line_number":753,"context_line":"                infinidat_group.add_member(infinidat_volume)"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"    def _create_copy_from_snapshot(self, volume, snapshot):"},{"line_number":756,"context_line":"        \"\"\"Create a generic clone from a snapshot."}],"source_content_type":"text/x-python","patch_set":1,"id":"ef57700a_508fcfba","line":753,"updated":"2026-01-16 14:53:31.000000000","message":"after promoting the snapshot, what if any of the following operations like extend_volume() or _set_qos() or add_member() fail? do they raise any exceptions? if yes, won\u0027t this create a zombie volume on backend? if no will this be rolled back?","commit_id":"0e832ae5017955fac96341ab844f2b64dd2ba22e"},{"author":{"_account_id":35075,"name":"Alexander Deiter","email":"adeiter@infinidat.com","username":"adeiter"},"change_message_id":"75f53edae47b82e3738354e6df9768813ac044a7","unresolved":false,"context_lines":[{"line_number":750,"context_line":"            group \u003d volume_utils.group_get_by_id(volume.group_id)"},{"line_number":751,"context_line":"            if volume_utils.is_group_a_cg_snapshot_type(group):"},{"line_number":752,"context_line":"                infinidat_group \u003d self._get_infinidat_cg(group)"},{"line_number":753,"context_line":"                infinidat_group.add_member(infinidat_volume)"},{"line_number":754,"context_line":""},{"line_number":755,"context_line":"    def _create_copy_from_snapshot(self, volume, snapshot):"},{"line_number":756,"context_line":"        \"\"\"Create a generic clone from a snapshot."}],"source_content_type":"text/x-python","patch_set":1,"id":"57453e0a_fd7cb1c3","line":753,"in_reply_to":"ef57700a_508fcfba","updated":"2026-03-13 14:57:51.000000000","message":"Hello Akshay,\n\nThank you very much for the review!\n\n\u003e after promoting the snapshot, what if any of the following operations like extend_volume() or _set_qos() or add_member() fail? do they raise any exceptions? if yes, won\u0027t this create a zombie volume on backend? if no will this be rolled back?\n\nFixed in patch set #2\n\nThank you and have a nice day!","commit_id":"0e832ae5017955fac96341ab844f2b64dd2ba22e"},{"author":{"_account_id":36538,"name":"Harsh Ailani","display_name":"Harsh Ailani","email":"harsh.ailani@ibm.com","username":"harshailani"},"change_message_id":"2328ae747ffc84c0a9a875bde14d906cc8869898","unresolved":true,"context_lines":[{"line_number":756,"context_line":"        \"\"\"Create a generic clone from a snapshot."},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"        Old versions of InfiniBox do not support detached clones,"},{"line_number":759,"context_line":"        so we use dd to copy data. This can be a slow operation:"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"        - create destination volume"},{"line_number":762,"context_line":"        - map source snapshot and destination volume"}],"source_content_type":"text/x-python","patch_set":1,"id":"83b495ed_01db4fed","line":759,"updated":"2026-01-16 14:15:19.000000000","message":"end of line is a \":\"","commit_id":"0e832ae5017955fac96341ab844f2b64dd2ba22e"},{"author":{"_account_id":35075,"name":"Alexander Deiter","email":"adeiter@infinidat.com","username":"adeiter"},"change_message_id":"75f53edae47b82e3738354e6df9768813ac044a7","unresolved":false,"context_lines":[{"line_number":756,"context_line":"        \"\"\"Create a generic clone from a snapshot."},{"line_number":757,"context_line":""},{"line_number":758,"context_line":"        Old versions of InfiniBox do not support detached clones,"},{"line_number":759,"context_line":"        so we use dd to copy data. This can be a slow operation:"},{"line_number":760,"context_line":""},{"line_number":761,"context_line":"        - create destination volume"},{"line_number":762,"context_line":"        - map source snapshot and destination volume"}],"source_content_type":"text/x-python","patch_set":1,"id":"3116ee0c_6ea0e24a","line":759,"in_reply_to":"83b495ed_01db4fed","updated":"2026-03-13 14:57:51.000000000","message":"Hello Harsh,\n\nThank you very much for the review!\n\n\u003e end of line is a \":\"\n\nFixed in patch set #2\n\nThank you and have a nice day!","commit_id":"0e832ae5017955fac96341ab844f2b64dd2ba22e"}]}
