)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"e325993ffa70dc999a4a2e5f158c9e6069b76469","unresolved":true,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Depends-On: https://review.opendev.org/c/openstack/manila-tempest-plugin/+/778188"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Tom Barron \u003ctpb@dyncloud.net\u003e"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"DocImpact"},{"line_number":17,"context_line":"Partially-Implements: blueprint create-share-from-snapshot-cephfs"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"8bf25198_7c94dc0a","line":14,"updated":"2021-03-24 03:22:37.000000000","message":"There is only one \u0027Co-Authored-By\u0027 tag here?","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"263dbc6adf65a2a15427d3f89224e120dd46f9c0","unresolved":false,"context_lines":[{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Depends-On: https://review.opendev.org/c/openstack/manila-tempest-plugin/+/778188"},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Co-Authored-By: Tom Barron \u003ctpb@dyncloud.net\u003e"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"DocImpact"},{"line_number":17,"context_line":"Partially-Implements: blueprint create-share-from-snapshot-cephfs"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":28,"id":"bc1d6fba_9094353a","line":14,"in_reply_to":"8bf25198_7c94dc0a","updated":"2021-03-24 17:22:29.000000000","message":"Ack","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"}],"manila/share/drivers/cephfs/driver.py":[{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"98cf92736dc8c6f11421ad46c609137138b82cdd","unresolved":true,"context_lines":[{"line_number":371,"context_line":"        ceph_version \u003d get_ceph_version(self._execute(\u0027ceph\u0027, \u0027version\u0027,"},{"line_number":372,"context_line":"                                                      \u0027--user\u0027, \u0027manila\u0027))"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        if version.parse(ceph_version) \u003c version.parse(\"16.0.1\"):"},{"line_number":375,"context_line":"            msg \u003d _(\"Create share from snapshot is not supported for Ceph \""},{"line_number":376,"context_line":"                    \"versions prior than \u002716.0.1\u0027\")"},{"line_number":377,"context_line":"            raise exception.ShareBackendException(msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"d91b1d71_080effaa","line":374,"updated":"2021-03-04 23:39:16.000000000","message":"We will be able to support nearly all ceph_volume_client interfaces using ceph-mgr volumes from nautilus 14.2.17 and 15.2.10 release onwards","commit_id":"088f41d6f01ba362004f2e193667c2f8bf08e27b"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"07bc9c12bb75a72d22c79c347f7d747f24dc9539","unresolved":true,"context_lines":[{"line_number":371,"context_line":"        ceph_version \u003d get_ceph_version(self._execute(\u0027ceph\u0027, \u0027version\u0027,"},{"line_number":372,"context_line":"                                                      \u0027--user\u0027, \u0027manila\u0027))"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"        if version.parse(ceph_version) \u003c version.parse(\"16.0.1\"):"},{"line_number":375,"context_line":"            msg \u003d _(\"Create share from snapshot is not supported for Ceph \""},{"line_number":376,"context_line":"                    \"versions prior than \u002716.0.1\u0027\")"},{"line_number":377,"context_line":"            raise exception.ShareBackendException(msg\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"57a52209_c662e986","line":374,"in_reply_to":"d91b1d71_080effaa","updated":"2021-03-07 18:49:33.000000000","message":"Shall we check for those specific microversions?","commit_id":"088f41d6f01ba362004f2e193667c2f8bf08e27b"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"396d84f2391c4e2121536abb1b3326a4089848a6","unresolved":true,"context_lines":[{"line_number":387,"context_line":"            # NOTE(vkmc) Protect/unprotect will be deprecated"},{"line_number":388,"context_line":"            # Protect snapshot"},{"line_number":389,"context_line":"            # ceph fs subvolume snapshot protect \u003cvol_name\u003e"},{"line_number":390,"context_line":"            # \u003csubvol_name\u003e \u003csnap_name\u003e [--group_name \u003csubvol_group_name\u003e]"},{"line_number":391,"context_line":"            self._execute(\u0027ceph\u0027, \u0027fs\u0027, \u0027subvolume\u0027, \u0027snapshot\u0027, \u0027protect\u0027,"},{"line_number":392,"context_line":"                          \u0027cephfs\u0027, parent_share_id, snapshot_id,"},{"line_number":393,"context_line":"                          \u0027--user\u0027, \u0027manila\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"7746668d_0f6a9c09","line":390,"updated":"2021-03-04 22:41:26.000000000","message":"Do we need to use `fs subvolume snapshot protect/unprotect`? It was deprecated a while ago in nautilus 14.2.11 (released Aug 2020) and in octopus 15.2.5 (released Sep 2020). The `fs subvolume authorize/deauthorize/evict` commands will be in the soon to be released nautilus 14.2.17, and 15.2.10. I think these future releases should be the minimum supported versions for mgr/volumes interface? What do you think?","commit_id":"088f41d6f01ba362004f2e193667c2f8bf08e27b"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"07bc9c12bb75a72d22c79c347f7d747f24dc9539","unresolved":true,"context_lines":[{"line_number":387,"context_line":"            # NOTE(vkmc) Protect/unprotect will be deprecated"},{"line_number":388,"context_line":"            # Protect snapshot"},{"line_number":389,"context_line":"            # ceph fs subvolume snapshot protect \u003cvol_name\u003e"},{"line_number":390,"context_line":"            # \u003csubvol_name\u003e \u003csnap_name\u003e [--group_name \u003csubvol_group_name\u003e]"},{"line_number":391,"context_line":"            self._execute(\u0027ceph\u0027, \u0027fs\u0027, \u0027subvolume\u0027, \u0027snapshot\u0027, \u0027protect\u0027,"},{"line_number":392,"context_line":"                          \u0027cephfs\u0027, parent_share_id, snapshot_id,"},{"line_number":393,"context_line":"                          \u0027--user\u0027, \u0027manila\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"5b7e7d48_5aa2104a","line":390,"in_reply_to":"7746668d_0f6a9c09","updated":"2021-03-07 18:49:33.000000000","message":"I wasn\u0027t sure about the deprecation status for protect/unprotect and how safe it is to do the clone operation. I\u0027ll remove them.","commit_id":"088f41d6f01ba362004f2e193667c2f8bf08e27b"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"30448746b767250f59f061a658beaa13af42ecb8","unresolved":true,"context_lines":[{"line_number":245,"context_line":"            \u0027free_capacity_gb\u0027: free_capacity_gb,"},{"line_number":246,"context_line":"            \u0027snapshot_support\u0027: self.configuration.safe_get("},{"line_number":247,"context_line":"                \u0027cephfs_enable_snapshots\u0027),"},{"line_number":248,"context_line":"            # FIXME(vkmc) Should this be a config option?"},{"line_number":249,"context_line":"            \u0027create_share_from_snapshot_support\u0027: True,"},{"line_number":250,"context_line":"        }"},{"line_number":251,"context_line":"        super(    # pylint: disable\u003dno-member"}],"source_content_type":"text/x-python","patch_set":14,"id":"ab84fc2c_d199a9d5","line":248,"updated":"2021-03-12 14:22:52.000000000","message":"Can just use the same config option as for snapshot_support since create_share_from_snapshot_support will now be True if and only if snapshot_support is True?","commit_id":"962e5b69112145b475d1cc74f90880a5b865c98f"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"13fc820f96c0d9568267fa9f3e041e6a60190600","unresolved":true,"context_lines":[{"line_number":245,"context_line":"            \u0027free_capacity_gb\u0027: free_capacity_gb,"},{"line_number":246,"context_line":"            \u0027snapshot_support\u0027: self.configuration.safe_get("},{"line_number":247,"context_line":"                \u0027cephfs_enable_snapshots\u0027),"},{"line_number":248,"context_line":"            # FIXME(vkmc) Should this be a config option?"},{"line_number":249,"context_line":"            \u0027create_share_from_snapshot_support\u0027: True,"},{"line_number":250,"context_line":"        }"},{"line_number":251,"context_line":"        super(    # pylint: disable\u003dno-member"}],"source_content_type":"text/x-python","patch_set":14,"id":"4817b737_6d34a17f","line":248,"in_reply_to":"2349b432_11d8bf81","updated":"2021-03-12 22:40:37.000000000","message":"yes - for both 1) and 2), the administrator that makes their share types has to remove \"create_from_snapshot_support\" extra spec. They shouldn\u0027t set it to False. If they set it to False, manila will take that to mean that they are looking for a backend that explicitly doesn\u0027t support that capability.","commit_id":"962e5b69112145b475d1cc74f90880a5b865c98f"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"b6458e27478ddd5f484db5a70b6fbfbd3cbfecb2","unresolved":true,"context_lines":[{"line_number":245,"context_line":"            \u0027free_capacity_gb\u0027: free_capacity_gb,"},{"line_number":246,"context_line":"            \u0027snapshot_support\u0027: self.configuration.safe_get("},{"line_number":247,"context_line":"                \u0027cephfs_enable_snapshots\u0027),"},{"line_number":248,"context_line":"            # FIXME(vkmc) Should this be a config option?"},{"line_number":249,"context_line":"            \u0027create_share_from_snapshot_support\u0027: True,"},{"line_number":250,"context_line":"        }"},{"line_number":251,"context_line":"        super(    # pylint: disable\u003dno-member"}],"source_content_type":"text/x-python","patch_set":14,"id":"5ec83253_0d836899","line":248,"in_reply_to":"4817b737_6d34a17f","updated":"2021-03-12 23:07:54.000000000","message":"OK, vkmc let\u0027s scrap the options altogether and just set snapshot_support\u003dTrue and create_share_from_snapshot_support\u003dTrue.\n\nThen perhaps as a later pass we can look at some kind of interrogation of the actual back end to ensure that these are actually supported on the back end (consider the brownfield upgrade case above).","commit_id":"962e5b69112145b475d1cc74f90880a5b865c98f"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"0d82803bd49cc950cad02f32c0b6a1c89b917337","unresolved":true,"context_lines":[{"line_number":245,"context_line":"            \u0027free_capacity_gb\u0027: free_capacity_gb,"},{"line_number":246,"context_line":"            \u0027snapshot_support\u0027: self.configuration.safe_get("},{"line_number":247,"context_line":"                \u0027cephfs_enable_snapshots\u0027),"},{"line_number":248,"context_line":"            # FIXME(vkmc) Should this be a config option?"},{"line_number":249,"context_line":"            \u0027create_share_from_snapshot_support\u0027: True,"},{"line_number":250,"context_line":"        }"},{"line_number":251,"context_line":"        super(    # pylint: disable\u003dno-member"}],"source_content_type":"text/x-python","patch_set":14,"id":"a153ce44_c166cca5","line":248,"in_reply_to":"5ec83253_0d836899","updated":"2021-03-16 00:33:45.000000000","message":"Ok, the snapshot_support option was already deprecated, we can directly remove the option from above and set it to true here. And for create_share_from_snapshot likewise. We would need to document the behavior or what is the effect of using snapshot_support\u003dfalse and/or create_share_from_snapshot_support\u003dfalse in the extra specs for the share types. All drivers behave the same?","commit_id":"962e5b69112145b475d1cc74f90880a5b865c98f"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"2b21f992a5b1d1f09b49daf345ed8744a52c559a","unresolved":true,"context_lines":[{"line_number":245,"context_line":"            \u0027free_capacity_gb\u0027: free_capacity_gb,"},{"line_number":246,"context_line":"            \u0027snapshot_support\u0027: self.configuration.safe_get("},{"line_number":247,"context_line":"                \u0027cephfs_enable_snapshots\u0027),"},{"line_number":248,"context_line":"            # FIXME(vkmc) Should this be a config option?"},{"line_number":249,"context_line":"            \u0027create_share_from_snapshot_support\u0027: True,"},{"line_number":250,"context_line":"        }"},{"line_number":251,"context_line":"        super(    # pylint: disable\u003dno-member"}],"source_content_type":"text/x-python","patch_set":14,"id":"2349b432_11d8bf81","line":248,"in_reply_to":"7c7baa99_0db3302f","updated":"2021-03-12 18:22:11.000000000","message":"In that case the driver will report both capabilities as True, unconditionally, right?\n\n#1) with a brownfield Ceph deployment the CephFS back end may not support these (the OpenStack operator may not own/manage the Ceph cluster in order to tell it that yes they really really want snapshot support).\n\n#2) I\u0027m a little confused about the front end control by share type.  If the only share type says e.g. snapshot_support\u003dTrue and create_from_snapshot_support\u003dFalse but the driver reports both as True, then won\u0027t the user\u0027s attempt to create shares fail with:\nMar 12 18:11:17 ubuntu-focal-fossa-server manila-scheduler[328776]: DEBUG manila.scheduler.utils [None req-2d56a905-a77f-4abb-a4a5-261d8da18a09 admin None] Share type extra spec requirement \"create_share_from_snapshot_support\u003d\u003cis\u003e False\" does not match reported capability \"True\" {{(pid\u003d328776) capabilities_satisfied /opt/stack/manila/manila/scheduler/utils.py:173}}","commit_id":"962e5b69112145b475d1cc74f90880a5b865c98f"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"eee315349884ded387028765d4bf5944506f95ea","unresolved":true,"context_lines":[{"line_number":245,"context_line":"            \u0027free_capacity_gb\u0027: free_capacity_gb,"},{"line_number":246,"context_line":"            \u0027snapshot_support\u0027: self.configuration.safe_get("},{"line_number":247,"context_line":"                \u0027cephfs_enable_snapshots\u0027),"},{"line_number":248,"context_line":"            # FIXME(vkmc) Should this be a config option?"},{"line_number":249,"context_line":"            \u0027create_share_from_snapshot_support\u0027: True,"},{"line_number":250,"context_line":"        }"},{"line_number":251,"context_line":"        super(    # pylint: disable\u003dno-member"}],"source_content_type":"text/x-python","patch_set":14,"id":"0e874321_dffebb54","line":248,"in_reply_to":"a153ce44_c166cca5","updated":"2021-03-16 00:42:12.000000000","message":"Changed my mind, let\u0027s keep snapshot_support option for one more cycle. We just deprecated this on the Victoria release, seems more smart to keep it around for at least one more cycle.","commit_id":"962e5b69112145b475d1cc74f90880a5b865c98f"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"e74f28b72e69f607b560a6ca5901ddb41b665ad3","unresolved":true,"context_lines":[{"line_number":245,"context_line":"            \u0027free_capacity_gb\u0027: free_capacity_gb,"},{"line_number":246,"context_line":"            \u0027snapshot_support\u0027: self.configuration.safe_get("},{"line_number":247,"context_line":"                \u0027cephfs_enable_snapshots\u0027),"},{"line_number":248,"context_line":"            # FIXME(vkmc) Should this be a config option?"},{"line_number":249,"context_line":"            \u0027create_share_from_snapshot_support\u0027: True,"},{"line_number":250,"context_line":"        }"},{"line_number":251,"context_line":"        super(    # pylint: disable\u003dno-member"}],"source_content_type":"text/x-python","patch_set":14,"id":"7c7baa99_0db3302f","line":248,"in_reply_to":"ab84fc2c_d199a9d5","updated":"2021-03-12 17:27:21.000000000","message":"No 😞\nLets remove both config options. We shouldn\u0027t allow toggling things via backend configuration when there\u0027s a front-end gate around such capabilities. Unless an operator explicitly asks for these capabilities via share type extra specs, users won\u0027t get them.","commit_id":"962e5b69112145b475d1cc74f90880a5b865c98f"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"30448746b767250f59f061a658beaa13af42ecb8","unresolved":true,"context_lines":[{"line_number":521,"context_line":"        if share[\u0027share_group_id\u0027] is not None:"},{"line_number":522,"context_line":"            argdict.update({\"group_name\": share[\"share_group_id\"]})"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"        out \u003d rados_command(self.rados_client, \"fs subvolume getpath\", argdict)"},{"line_number":525,"context_line":"        subvolume_path \u003d out.decode().strip()"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"        return self.protocol_helper.get_export_locations(share, subvolume_path)"}],"source_content_type":"text/x-python","patch_set":14,"id":"94c28f48_6683cfab","line":524,"updated":"2021-03-12 14:22:52.000000000","message":"This is sometimes failing for me with \n\nMar 12 13:40:42 ubuntu-focal-fossa-server manila-share[323865]: ERROR oslo_messaging.rpc.server rados.Error: [errno -11] subvolume \u00271c6d6679-0243-44e1-ae61-2ce89f93d831\u0027 is not ready for operation getpath\n \nThen if I manually run:\n# ceph fs subvolume info cephfs \u003csubvolume-id-for-the-new-share\u003e\nit works.\n\nSo I think it might take a little time for the new subvolume to become ready after a clone?\n\nIn my devstack I\u0027ve worked around the issue by doing the following:\n\n        rados_command(\n            self.rados_client, \"fs subvolume snapshot clone\", argdict)\n\n        @retrying.retry(stop_max_attempt_number\u003d3,\n                        wait_fixed\u003d2000,\n                        retry_on_exception\u003dlambda exc: True)\n        def get_subvolume_path():\n            # get path of FS subvolume/share                                                                                                                                                                                                                   \n            argdict \u003d {\n                \"vol_name\": self.volname,\n                \"sub_name\": share[\"id\"]\n            }\n            if share[\u0027share_group_id\u0027] is not None:\n                argdict.update({\"group_name\": share[\"share_group_id\"]})\n            return rados_command(self.rados_client, \"fs subvolume getpath\", argdict)\n        out \u003d get_subvolume_path()\n        subvolume_path \u003d out.decode().strip()\n\n@rraja - What\u0027s the story on cloned (or other new) subvolumes being ready?  Do we need to retry here?  Could it happen with a bare subvolume create (no clone) as well?","commit_id":"962e5b69112145b475d1cc74f90880a5b865c98f"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"d942fd72aa2b4a2e16de6562c0d4a3cb6cec3f16","unresolved":true,"context_lines":[{"line_number":521,"context_line":"        if share[\u0027share_group_id\u0027] is not None:"},{"line_number":522,"context_line":"            argdict.update({\"group_name\": share[\"share_group_id\"]})"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"        out \u003d rados_command(self.rados_client, \"fs subvolume getpath\", argdict)"},{"line_number":525,"context_line":"        subvolume_path \u003d out.decode().strip()"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"        return self.protocol_helper.get_export_locations(share, subvolume_path)"}],"source_content_type":"text/x-python","patch_set":14,"id":"73c8fec3_4ea73ac4","line":524,"in_reply_to":"18258f57_47bc392b","updated":"2021-03-15 12:40:14.000000000","message":"@rraja - Yes, I think that\u0027s the right approach.  I\"ll try it out in my devstack.","commit_id":"962e5b69112145b475d1cc74f90880a5b865c98f"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"cc654a81aad0435eff03cf011c86e4530cde4a14","unresolved":true,"context_lines":[{"line_number":521,"context_line":"        if share[\u0027share_group_id\u0027] is not None:"},{"line_number":522,"context_line":"            argdict.update({\"group_name\": share[\"share_group_id\"]})"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"        out \u003d rados_command(self.rados_client, \"fs subvolume getpath\", argdict)"},{"line_number":525,"context_line":"        subvolume_path \u003d out.decode().strip()"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"        return self.protocol_helper.get_export_locations(share, subvolume_path)"}],"source_content_type":"text/x-python","patch_set":14,"id":"18258f57_47bc392b","line":524,"in_reply_to":"4cf65c29_6dde7563","updated":"2021-03-15 04:00:04.000000000","message":"@tbarron\nI checked out the manila/share/manager.py code. Looks like we don\u0027t have to wait for the clone to complete? Note that it may take a long time to complete clone for shares that are several GB. The driver can return a model_update object with \u0027status\u0027 key set as \u0027constants.STATUS_CREATING_FROM_SNAPSHOT` once the `fs subvolume clone status` reaches \"in-progress\" state. https://github.com/openstack/manila/blob/stable/victoria/manila/share/manager.py#L1913\n\nhttps://github.com/openstack/manila/blob/stable/victoria/manila/share/manager.py#L4671\nseems to be periodically checking for the status of the shares. Maybe use that check the clone status periodically and update manila\u0027a database accordingly?","commit_id":"962e5b69112145b475d1cc74f90880a5b865c98f"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"0d82803bd49cc950cad02f32c0b6a1c89b917337","unresolved":true,"context_lines":[{"line_number":521,"context_line":"        if share[\u0027share_group_id\u0027] is not None:"},{"line_number":522,"context_line":"            argdict.update({\"group_name\": share[\"share_group_id\"]})"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"        out \u003d rados_command(self.rados_client, \"fs subvolume getpath\", argdict)"},{"line_number":525,"context_line":"        subvolume_path \u003d out.decode().strip()"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"        return self.protocol_helper.get_export_locations(share, subvolume_path)"}],"source_content_type":"text/x-python","patch_set":14,"id":"a92fddca_8d8b9590","line":524,"in_reply_to":"73c8fec3_4ea73ac4","updated":"2021-03-16 00:33:45.000000000","message":"This means we can return and let the scheduler monitor when the share created from snapshot is ready?","commit_id":"962e5b69112145b475d1cc74f90880a5b865c98f"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"0f8ee32448ee802a7cd87921446877e808c4debf","unresolved":true,"context_lines":[{"line_number":521,"context_line":"        if share[\u0027share_group_id\u0027] is not None:"},{"line_number":522,"context_line":"            argdict.update({\"group_name\": share[\"share_group_id\"]})"},{"line_number":523,"context_line":""},{"line_number":524,"context_line":"        out \u003d rados_command(self.rados_client, \"fs subvolume getpath\", argdict)"},{"line_number":525,"context_line":"        subvolume_path \u003d out.decode().strip()"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"        return self.protocol_helper.get_export_locations(share, subvolume_path)"}],"source_content_type":"text/x-python","patch_set":14,"id":"4cf65c29_6dde7563","line":524,"in_reply_to":"94c28f48_6683cfab","updated":"2021-03-12 23:12:16.000000000","message":"Discussed briefly with Shyam https://github.com/ShyamsundarR who helped write the CSI driver\u0027s equivalent API. \n\nWe need to monitor the clone\u0027s state using `fs clone status \u003cvol_name\u003e \u003cclone_name\u003e \u003cgroup_name\u003e` command until the clone is in \"completed\" or \"failed\" state. The clone state is in \u0027pending\u0027 state if an asynchronous cloner thread hasn\u0027t started cloning, or is \u0027in-progress\u0027 if an asynchronous cloner thread is doing the clone. The clone is going to take longer for larger shares to complete. I\u0027m not sure how long we wait before we timeout, or how frequently we issue the `fs clone state` call.\n\nThe `fs snapshot clone` command triggers a recursive copy of the snapshot, where a libcephfs client traverses the tree and does a bulk copy as follows by the python code,\nhttps://github.com/ceph/ceph/blob/v16.1.0/src/pybind/mgr/volumes/fs/async_cloner.py#L124\n\n\nWe can get the clone state by doing the following,\ndef _get_clone_state(self):\n    argdict \u003d {\n        \"vol_name\": self.volname,\n        \"clone_name\": share[\"id\"]\n    }\n    if share[\u0027share_group_id\u0027] is not None:\n        argdict.update({\"group_name\": share[\"share_group_id\"]})\n    out \u003d rados_command(self.rados_client, \"fs clone status\", argdict)\n    return out[\u0027status\u0027][\u0027state\u0027]","commit_id":"962e5b69112145b475d1cc74f90880a5b865c98f"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"9c8dc68382902ad5e02b92ef7d0fb64032760bfe","unresolved":true,"context_lines":[{"line_number":406,"context_line":""},{"line_number":407,"context_line":"        return self._get_export_locations(share)"},{"line_number":408,"context_line":""},{"line_number":409,"context_line":"    def delete_share(self, context, share, share_server\u003dNone):"},{"line_number":410,"context_line":"        argdict \u003d {"},{"line_number":411,"context_line":"            \"vol_name\": self.volname,"},{"line_number":412,"context_line":"            \"sub_name\": share[\"id\"],"}],"source_content_type":"text/x-python","patch_set":18,"id":"d32b40cd_cff12c97","line":409,"updated":"2021-03-17 21:04:31.000000000","message":"Does manila allow deleting a share that is in \u0027STATUS_ERROR\u0027 or \u0027STATUS_CREATING_FROM_SNAPSHOT\u0027 state?\n\nAs discussed in Tom\u0027s patch https://review.opendev.org/c/openstack/manila/+/780393, we need to determine if the share being removed is a CephFS subvolume or a snapshot-clone using `fs clone status` command.\n\nIf it\u0027s a clone and status is \u0027in-progress\u0027 or \u0027pending\u0027, we need to cancel the cloning. Then issue `fs subvolume rm --force\u0027 to remove the clone.","commit_id":"989e1d90d7a55efaea3b0da9fa6625ab72fce600"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"b84b5a4fb1cb328d846dfcd9908a2a6cbbd1f9a1","unresolved":true,"context_lines":[{"line_number":582,"context_line":"        out \u003d rados_command(self.rados_client,"},{"line_number":583,"context_line":"                            \"fs clone status\", argdict, True)"},{"line_number":584,"context_line":"        status \u003d out[\u0027status\u0027][\u0027state\u0027]"},{"line_number":585,"context_line":"        if status \u003d\u003d \u0027failed\u0027:"},{"line_number":586,"context_line":"            raise exception.ShareBackendException("},{"line_number":587,"context_line":"                \"rados client clone of snapshot [%(sn)s}] to new \""},{"line_number":588,"context_line":"                \"share [%(shr)s}] failed.\" %"}],"source_content_type":"text/x-python","patch_set":18,"id":"3870bcea_48464230","line":585,"updated":"2021-03-17 18:36:49.000000000","message":"We should probably define constants for the status values, as well as for the set of possible statuses (for the check at line 590).","commit_id":"989e1d90d7a55efaea3b0da9fa6625ab72fce600"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"d90286e122eff14f61fa672405ab3560224ab6c9","unresolved":false,"context_lines":[{"line_number":582,"context_line":"        out \u003d rados_command(self.rados_client,"},{"line_number":583,"context_line":"                            \"fs clone status\", argdict, True)"},{"line_number":584,"context_line":"        status \u003d out[\u0027status\u0027][\u0027state\u0027]"},{"line_number":585,"context_line":"        if status \u003d\u003d \u0027failed\u0027:"},{"line_number":586,"context_line":"            raise exception.ShareBackendException("},{"line_number":587,"context_line":"                \"rados client clone of snapshot [%(sn)s}] to new \""},{"line_number":588,"context_line":"                \"share [%(shr)s}] failed.\" %"}],"source_content_type":"text/x-python","patch_set":18,"id":"1daea3a5_34cbd233","line":585,"in_reply_to":"3870bcea_48464230","updated":"2021-03-17 21:52:54.000000000","message":"Ack","commit_id":"989e1d90d7a55efaea3b0da9fa6625ab72fce600"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"ff96a8d9a1d8a7463be0e2bcd0c858593a131c79","unresolved":true,"context_lines":[{"line_number":587,"context_line":"                \"rados client clone of snapshot [%(sn)s}] to new \""},{"line_number":588,"context_line":"                \"share [%(shr)s}] failed.\" %"},{"line_number":589,"context_line":"                {\"sn\": share[\"snapshot_id\"], \"shr\": share[\"id\"]})"},{"line_number":590,"context_line":"        if status not in (\u0027pending\u0027, \u0027in-progress\u0027, \u0027complete\u0027):"},{"line_number":591,"context_line":"            raise exception.ShareBackendException("},{"line_number":592,"context_line":"                \"[%(be)s] rados client returned unknown clone \""},{"line_number":593,"context_line":"                \"status [%(st)s]!\" %"}],"source_content_type":"text/x-python","patch_set":18,"id":"bc1944f7_b9ec8246","line":590,"updated":"2021-03-17 18:18:47.000000000","message":"\"canceled\" is another possible state a clone could be in if a clone is canceled with `fs clone cancel` to remove an on-going clone.","commit_id":"989e1d90d7a55efaea3b0da9fa6625ab72fce600"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"b84b5a4fb1cb328d846dfcd9908a2a6cbbd1f9a1","unresolved":true,"context_lines":[{"line_number":587,"context_line":"                \"rados client clone of snapshot [%(sn)s}] to new \""},{"line_number":588,"context_line":"                \"share [%(shr)s}] failed.\" %"},{"line_number":589,"context_line":"                {\"sn\": share[\"snapshot_id\"], \"shr\": share[\"id\"]})"},{"line_number":590,"context_line":"        if status not in (\u0027pending\u0027, \u0027in-progress\u0027, \u0027complete\u0027):"},{"line_number":591,"context_line":"            raise exception.ShareBackendException("},{"line_number":592,"context_line":"                \"[%(be)s] rados client returned unknown clone \""},{"line_number":593,"context_line":"                \"status [%(st)s]!\" %"}],"source_content_type":"text/x-python","patch_set":18,"id":"bd9cce96_1550e2d4","line":590,"in_reply_to":"bc1944f7_b9ec8246","updated":"2021-03-17 18:36:49.000000000","message":"Thanks!  Didn\u0027t know about that one.\n\nI guess we should set constants.STATUS_ERROR on the new share in that case?","commit_id":"989e1d90d7a55efaea3b0da9fa6625ab72fce600"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"d97dda78e234c796404ec87d79fa6645953b6ce5","unresolved":true,"context_lines":[{"line_number":587,"context_line":"                \"rados client clone of snapshot [%(sn)s}] to new \""},{"line_number":588,"context_line":"                \"share [%(shr)s}] failed.\" %"},{"line_number":589,"context_line":"                {\"sn\": share[\"snapshot_id\"], \"shr\": share[\"id\"]})"},{"line_number":590,"context_line":"        if status not in (\u0027pending\u0027, \u0027in-progress\u0027, \u0027complete\u0027):"},{"line_number":591,"context_line":"            raise exception.ShareBackendException("},{"line_number":592,"context_line":"                \"[%(be)s] rados client returned unknown clone \""},{"line_number":593,"context_line":"                \"status [%(st)s]!\" %"}],"source_content_type":"text/x-python","patch_set":18,"id":"855d43fe_f1993415","line":590,"in_reply_to":"bd9cce96_1550e2d4","updated":"2021-03-17 19:31:06.000000000","message":"yeah. I\u0027ve added this as a comment in 612.","commit_id":"989e1d90d7a55efaea3b0da9fa6625ab72fce600"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"d97dda78e234c796404ec87d79fa6645953b6ce5","unresolved":true,"context_lines":[{"line_number":609,"context_line":"            updates[\u0027status\u0027] \u003d constants.STATUS_CREATING_FROM_SNAPSHOT,"},{"line_number":610,"context_line":"            # FIXME(vkmc) Fix progress when ceph backend has support"},{"line_number":611,"context_line":"            updates[\u0027progress\u0027] \u003d \u0027progressing ...\u0027"},{"line_number":612,"context_line":"            updates[\u0027export_locations\u0027] \u003d {}"},{"line_number":613,"context_line":"        return updates"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"    def __del__(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"919deeed_2582c870","line":612,"updated":"2021-03-17 19:31:06.000000000","message":"elif status in (\u0027failed\u0027, \u0027canceled\u0027):\n     # seems like the share/manager.py will catch any exception and set the share\u0027s \u0027status\u0027 as constants.status_ERROR\n     raise exception.ShareBackendException(\"\u003cappropriate error message\u003e\")","commit_id":"989e1d90d7a55efaea3b0da9fa6625ab72fce600"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"d90286e122eff14f61fa672405ab3560224ab6c9","unresolved":false,"context_lines":[{"line_number":609,"context_line":"            updates[\u0027status\u0027] \u003d constants.STATUS_CREATING_FROM_SNAPSHOT,"},{"line_number":610,"context_line":"            # FIXME(vkmc) Fix progress when ceph backend has support"},{"line_number":611,"context_line":"            updates[\u0027progress\u0027] \u003d \u0027progressing ...\u0027"},{"line_number":612,"context_line":"            updates[\u0027export_locations\u0027] \u003d {}"},{"line_number":613,"context_line":"        return updates"},{"line_number":614,"context_line":""},{"line_number":615,"context_line":"    def __del__(self):"}],"source_content_type":"text/x-python","patch_set":18,"id":"9f3e3e4c_7487f681","line":612,"in_reply_to":"919deeed_2582c870","updated":"2021-03-17 21:52:54.000000000","message":"Ack","commit_id":"989e1d90d7a55efaea3b0da9fa6625ab72fce600"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"baa691c2e012f33c78b7f2e8bb59dfd57415f8fe","unresolved":true,"context_lines":[{"line_number":302,"context_line":"        if share[\u0027share_group_id\u0027] is not None:"},{"line_number":303,"context_line":"            argdict.update({\"group_name\": share[\"share_group_id\"]})"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        out \u003d rados_command(self.rados_client, \"fs subvolume getpath\", argdict)"},{"line_number":306,"context_line":"        subvolume_path \u003d out.decode().strip()"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        return self.protocol_helper.get_export_locations(share, subvolume_path)"}],"source_content_type":"text/x-python","patch_set":19,"id":"ff24a1ea_a418138c","line":305,"updated":"2021-03-18 13:50:09.000000000","message":"s/out/subvolume_path/","commit_id":"aa6c15bc3e5ac71f406015b8e59cd1f49bec460f"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"baa691c2e012f33c78b7f2e8bb59dfd57415f8fe","unresolved":true,"context_lines":[{"line_number":303,"context_line":"            argdict.update({\"group_name\": share[\"share_group_id\"]})"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        out \u003d rados_command(self.rados_client, \"fs subvolume getpath\", argdict)"},{"line_number":306,"context_line":"        subvolume_path \u003d out.decode().strip()"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"        return self.protocol_helper.get_export_locations(share, subvolume_path)"},{"line_number":309,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"3d3f3861_58ca6532","line":306,"updated":"2021-03-18 13:50:09.000000000","message":"delete this line","commit_id":"aa6c15bc3e5ac71f406015b8e59cd1f49bec460f"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"29f8050b182d8198d309694befc9bf17f071b680","unresolved":true,"context_lines":[{"line_number":422,"context_line":"        if share[\u0027share_group_id\u0027] is not None:"},{"line_number":423,"context_line":"            argdict.update({\"group_name\": share[\"share_group_id\"]})"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"        argdict_with_force \u003d dict(argdict)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        is_clone \u003d False"},{"line_number":428,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"e8ca3698_bf8702f5","line":425,"updated":"2021-03-19 17:04:58.000000000","message":"why not just use `argdict`? We force remove only if we `cancel clone` or clone is in \"failed\" or \"canceled\" state","commit_id":"8ae985d8b693975a79fc53433aeb97ce4cf59e2e"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"2f1a0302df247d202d0a08bff4ba74a9f260a4dc","unresolved":false,"context_lines":[{"line_number":422,"context_line":"        if share[\u0027share_group_id\u0027] is not None:"},{"line_number":423,"context_line":"            argdict.update({\"group_name\": share[\"share_group_id\"]})"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"        argdict_with_force \u003d dict(argdict)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        is_clone \u003d False"},{"line_number":428,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"20820b77_24b4d4b2","line":425,"in_reply_to":"229a404b_2378d00a","updated":"2021-03-22 23:45:55.000000000","message":"Done","commit_id":"8ae985d8b693975a79fc53433aeb97ce4cf59e2e"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"3124cdb7a73d298d59c42f7e436424b401a5e963","unresolved":true,"context_lines":[{"line_number":422,"context_line":"        if share[\u0027share_group_id\u0027] is not None:"},{"line_number":423,"context_line":"            argdict.update({\"group_name\": share[\"share_group_id\"]})"},{"line_number":424,"context_line":""},{"line_number":425,"context_line":"        argdict_with_force \u003d dict(argdict)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        is_clone \u003d False"},{"line_number":428,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"229a404b_2378d00a","line":425,"in_reply_to":"e8ca3698_bf8702f5","updated":"2021-03-22 23:36:49.000000000","message":"Removed, using a different dict for the rm operation","commit_id":"8ae985d8b693975a79fc53433aeb97ce4cf59e2e"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"29f8050b182d8198d309694befc9bf17f071b680","unresolved":true,"context_lines":[{"line_number":424,"context_line":""},{"line_number":425,"context_line":"        argdict_with_force \u003d dict(argdict)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        is_clone \u003d False"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        try:"},{"line_number":430,"context_line":"            status \u003d rados_command("}],"source_content_type":"text/x-python","patch_set":21,"id":"8402e368_be380b35","line":427,"updated":"2021-03-19 17:04:58.000000000","message":"maybe rename \"is_clone\" as \"cancel_clone\"?\nClone status may report as \"complete\" (this will be the case for all shares that were created from snapshots) or \"failed\" or \"canceled\", but is_clone will be False. This seems confusing.\n\ncancel_clone \u003d False\nstatus_clone \u003d None","commit_id":"8ae985d8b693975a79fc53433aeb97ce4cf59e2e"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"3124cdb7a73d298d59c42f7e436424b401a5e963","unresolved":false,"context_lines":[{"line_number":424,"context_line":""},{"line_number":425,"context_line":"        argdict_with_force \u003d dict(argdict)"},{"line_number":426,"context_line":""},{"line_number":427,"context_line":"        is_clone \u003d False"},{"line_number":428,"context_line":""},{"line_number":429,"context_line":"        try:"},{"line_number":430,"context_line":"            status \u003d rados_command("}],"source_content_type":"text/x-python","patch_set":21,"id":"0d6df75d_0956e72d","line":427,"in_reply_to":"8402e368_be380b35","updated":"2021-03-22 23:36:49.000000000","message":"Ack","commit_id":"8ae985d8b693975a79fc53433aeb97ce4cf59e2e"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"29f8050b182d8198d309694befc9bf17f071b680","unresolved":true,"context_lines":[{"line_number":435,"context_line":"            # if it is not a share created from a snapshot (a clone)"},{"line_number":436,"context_line":"            # we will get ENOSUP error when trying to access to its status"},{"line_number":437,"context_line":"            if e.errno \u003d\u003d -errno.ENOSUP:"},{"line_number":438,"context_line":"                is_clone \u003d False"},{"line_number":439,"context_line":"            raise exception.ShareBackendException(\"Failed to remove share.\")"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        if is_clone:"}],"source_content_type":"text/x-python","patch_set":21,"id":"e09edca2_78b5da7a","line":438,"updated":"2021-03-19 17:04:58.000000000","message":"no need to set again. just pass?","commit_id":"8ae985d8b693975a79fc53433aeb97ce4cf59e2e"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"3124cdb7a73d298d59c42f7e436424b401a5e963","unresolved":false,"context_lines":[{"line_number":435,"context_line":"            # if it is not a share created from a snapshot (a clone)"},{"line_number":436,"context_line":"            # we will get ENOSUP error when trying to access to its status"},{"line_number":437,"context_line":"            if e.errno \u003d\u003d -errno.ENOSUP:"},{"line_number":438,"context_line":"                is_clone \u003d False"},{"line_number":439,"context_line":"            raise exception.ShareBackendException(\"Failed to remove share.\")"},{"line_number":440,"context_line":""},{"line_number":441,"context_line":"        if is_clone:"}],"source_content_type":"text/x-python","patch_set":21,"id":"4cef836e_72bd4678","line":438,"in_reply_to":"e09edca2_78b5da7a","updated":"2021-03-22 23:36:49.000000000","message":"Ack","commit_id":"8ae985d8b693975a79fc53433aeb97ce4cf59e2e"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"29f8050b182d8198d309694befc9bf17f071b680","unresolved":true,"context_lines":[{"line_number":441,"context_line":"        if is_clone:"},{"line_number":442,"context_line":"            try:"},{"line_number":443,"context_line":"                rados_command(self.rados_client, \"fs clone cancel\", argdict)"},{"line_number":444,"context_line":"                argdict_with_force.update({\"force\": True})"},{"line_number":445,"context_line":"            except rados.Error:"},{"line_number":446,"context_line":"                raise exception.ShareBackendException("},{"line_number":447,"context_line":"                    \"Failed to cancel clone operation.\")"}],"source_content_type":"text/x-python","patch_set":21,"id":"2ccd5c47_2a21fbb6","line":444,"updated":"2021-03-19 17:04:58.000000000","message":"we should force remove even if clone status is `canceled` (already been canceled) or `failed`.\nSo maybe,\n```\nif cancel_clone:\n    try:\n        rados_command(self.rados_client, \"fs clone cancel\", argdict)\n    except rados.Error:\n        raise exception.ShareBackendException(\"Failed to cancel clone operation\")\n\nif status_clone in (CLONE_FAILED, CLONE_CANCELED) or cancel_clone:\n     argdict.update({\"force\": True})\n\n```","commit_id":"8ae985d8b693975a79fc53433aeb97ce4cf59e2e"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"3124cdb7a73d298d59c42f7e436424b401a5e963","unresolved":true,"context_lines":[{"line_number":441,"context_line":"        if is_clone:"},{"line_number":442,"context_line":"            try:"},{"line_number":443,"context_line":"                rados_command(self.rados_client, \"fs clone cancel\", argdict)"},{"line_number":444,"context_line":"                argdict_with_force.update({\"force\": True})"},{"line_number":445,"context_line":"            except rados.Error:"},{"line_number":446,"context_line":"                raise exception.ShareBackendException("},{"line_number":447,"context_line":"                    \"Failed to cancel clone operation.\")"}],"source_content_type":"text/x-python","patch_set":21,"id":"75619e64_9f4664f6","line":444,"in_reply_to":"2ccd5c47_2a21fbb6","updated":"2021-03-22 23:36:49.000000000","message":"Ended up passing the force flag always. Do you think we should add this control on the status_clone?","commit_id":"8ae985d8b693975a79fc53433aeb97ce4cf59e2e"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"2f1a0302df247d202d0a08bff4ba74a9f260a4dc","unresolved":false,"context_lines":[{"line_number":441,"context_line":"        if is_clone:"},{"line_number":442,"context_line":"            try:"},{"line_number":443,"context_line":"                rados_command(self.rados_client, \"fs clone cancel\", argdict)"},{"line_number":444,"context_line":"                argdict_with_force.update({\"force\": True})"},{"line_number":445,"context_line":"            except rados.Error:"},{"line_number":446,"context_line":"                raise exception.ShareBackendException("},{"line_number":447,"context_line":"                    \"Failed to cancel clone operation.\")"}],"source_content_type":"text/x-python","patch_set":21,"id":"615cb973_3b693df8","line":444,"in_reply_to":"75619e64_9f4664f6","updated":"2021-03-22 23:45:55.000000000","message":"Done","commit_id":"8ae985d8b693975a79fc53433aeb97ce4cf59e2e"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"77eb0ceb5370bc71c5254887a08470cdbacf0304","unresolved":true,"context_lines":[{"line_number":584,"context_line":"            self.rados_client, \"fs subvolume snapshot clone\", argdict)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"        status \u003d self._get_clone_status(share)"},{"line_number":587,"context_line":"        while status \u003d\u003d CLONE_PENDING:"},{"line_number":588,"context_line":"            status \u003d self._get_clone_status(share)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        if status \u003d\u003d CLONE_INPROGRESS:"},{"line_number":591,"context_line":"            model_update \u003d {"}],"source_content_type":"text/x-python","patch_set":21,"id":"e3e7663a_0b52e3b4","line":588,"range":{"start_line":587,"start_character":0,"end_line":588,"end_character":50},"updated":"2021-03-19 17:16:59.000000000","message":"1. Is there any chance of getting stuck here forever? We never know what is going to happen down there.\n2. Don\u0027t you think that is good to wait a little bit before triggering another operation? maybe sleep for a couple of ms?","commit_id":"8ae985d8b693975a79fc53433aeb97ce4cf59e2e"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"3124cdb7a73d298d59c42f7e436424b401a5e963","unresolved":false,"context_lines":[{"line_number":584,"context_line":"            self.rados_client, \"fs subvolume snapshot clone\", argdict)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"        status \u003d self._get_clone_status(share)"},{"line_number":587,"context_line":"        while status \u003d\u003d CLONE_PENDING:"},{"line_number":588,"context_line":"            status \u003d self._get_clone_status(share)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        if status \u003d\u003d CLONE_INPROGRESS:"},{"line_number":591,"context_line":"            model_update \u003d {"}],"source_content_type":"text/x-python","patch_set":21,"id":"1767c25b_65470b24","line":588,"range":{"start_line":587,"start_character":0,"end_line":588,"end_character":50},"in_reply_to":"45514485_0361f451","updated":"2021-03-22 23:36:49.000000000","message":"Done","commit_id":"8ae985d8b693975a79fc53433aeb97ce4cf59e2e"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"ec2f90ce8ee8d174d49578087e2ec4014584adc1","unresolved":true,"context_lines":[{"line_number":584,"context_line":"            self.rados_client, \"fs subvolume snapshot clone\", argdict)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"        status \u003d self._get_clone_status(share)"},{"line_number":587,"context_line":"        while status \u003d\u003d CLONE_PENDING:"},{"line_number":588,"context_line":"            status \u003d self._get_clone_status(share)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        if status \u003d\u003d CLONE_INPROGRESS:"},{"line_number":591,"context_line":"            model_update \u003d {"}],"source_content_type":"text/x-python","patch_set":21,"id":"45514485_0361f451","line":588,"range":{"start_line":587,"start_character":0,"end_line":588,"end_character":50},"in_reply_to":"7546a075_5951050f","updated":"2021-03-19 17:52:53.000000000","message":"+1","commit_id":"8ae985d8b693975a79fc53433aeb97ce4cf59e2e"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"616a3382b7c6db356d9fd35d02dde8d7bb13e721","unresolved":true,"context_lines":[{"line_number":584,"context_line":"            self.rados_client, \"fs subvolume snapshot clone\", argdict)"},{"line_number":585,"context_line":""},{"line_number":586,"context_line":"        status \u003d self._get_clone_status(share)"},{"line_number":587,"context_line":"        while status \u003d\u003d CLONE_PENDING:"},{"line_number":588,"context_line":"            status \u003d self._get_clone_status(share)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        if status \u003d\u003d CLONE_INPROGRESS:"},{"line_number":591,"context_line":"            model_update \u003d {"}],"source_content_type":"text/x-python","patch_set":21,"id":"7546a075_5951050f","line":588,"range":{"start_line":587,"start_character":0,"end_line":588,"end_character":50},"in_reply_to":"e3e7663a_0b52e3b4","updated":"2021-03-19 17:25:08.000000000","message":"Yes and I remarked on an earlier patch that we should use an exponential backoff and countdown.  We plan to do this with retrying or tenacity prior to merge.","commit_id":"8ae985d8b693975a79fc53433aeb97ce4cf59e2e"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"77eb0ceb5370bc71c5254887a08470cdbacf0304","unresolved":true,"context_lines":[{"line_number":587,"context_line":"        while status \u003d\u003d CLONE_PENDING:"},{"line_number":588,"context_line":"            status \u003d self._get_clone_status(share)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        if status \u003d\u003d CLONE_INPROGRESS:"},{"line_number":591,"context_line":"            model_update \u003d {"},{"line_number":592,"context_line":"                \u0027status\u0027: constants.STATUS_CREATING_FROM_SNAPSHOT,"},{"line_number":593,"context_line":"                # FIXME(vkmc) Fix progress when ceph backend has support"},{"line_number":594,"context_line":"                \u0027progress\u0027: \u0027progressing ...\u0027,"},{"line_number":595,"context_line":"                \u0027export_locations\u0027: {}"},{"line_number":596,"context_line":"            }"},{"line_number":597,"context_line":"        if status \u003d\u003d CLONE_COMPLETE:"},{"line_number":598,"context_line":"            model_update \u003d {"},{"line_number":599,"context_line":"                \u0027status\u0027: constants.STATUS_AVAILABLE,"},{"line_number":600,"context_line":"                \u0027progress\u0027: \u0027100%\u0027,"},{"line_number":601,"context_line":"                \u0027export_locations\u0027: self._get_export_locations(share)"},{"line_number":602,"context_line":"            }"},{"line_number":603,"context_line":"        return model_update"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"    def _get_clone_status(self, share):"},{"line_number":606,"context_line":"        \"\"\"Check the status of a newly cloned share.\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"e11ae5fc_ee364183","line":603,"range":{"start_line":590,"start_character":8,"end_line":603,"end_character":27},"updated":"2021-03-19 17:16:59.000000000","message":"It seems that \u0027_get_clone_status\u0027 can return \u0027CLONE_CANCELED\u0027 too, but there is no treatment for it here. Even knowning that may be impossible, I think that would be good to have a default model_update, like you did in \u0027_update_create_from_snapshot_status\u0027","commit_id":"8ae985d8b693975a79fc53433aeb97ce4cf59e2e"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"616a3382b7c6db356d9fd35d02dde8d7bb13e721","unresolved":true,"context_lines":[{"line_number":587,"context_line":"        while status \u003d\u003d CLONE_PENDING:"},{"line_number":588,"context_line":"            status \u003d self._get_clone_status(share)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        if status \u003d\u003d CLONE_INPROGRESS:"},{"line_number":591,"context_line":"            model_update \u003d {"},{"line_number":592,"context_line":"                \u0027status\u0027: constants.STATUS_CREATING_FROM_SNAPSHOT,"},{"line_number":593,"context_line":"                # FIXME(vkmc) Fix progress when ceph backend has support"},{"line_number":594,"context_line":"                \u0027progress\u0027: \u0027progressing ...\u0027,"},{"line_number":595,"context_line":"                \u0027export_locations\u0027: {}"},{"line_number":596,"context_line":"            }"},{"line_number":597,"context_line":"        if status \u003d\u003d CLONE_COMPLETE:"},{"line_number":598,"context_line":"            model_update \u003d {"},{"line_number":599,"context_line":"                \u0027status\u0027: constants.STATUS_AVAILABLE,"},{"line_number":600,"context_line":"                \u0027progress\u0027: \u0027100%\u0027,"},{"line_number":601,"context_line":"                \u0027export_locations\u0027: self._get_export_locations(share)"},{"line_number":602,"context_line":"            }"},{"line_number":603,"context_line":"        return model_update"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"    def _get_clone_status(self, share):"},{"line_number":606,"context_line":"        \"\"\"Check the status of a newly cloned share.\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"f98746fb_a24fa319","line":603,"range":{"start_line":590,"start_character":8,"end_line":603,"end_character":27},"in_reply_to":"e11ae5fc_ee364183","updated":"2021-03-19 17:25:08.000000000","message":"+1","commit_id":"8ae985d8b693975a79fc53433aeb97ce4cf59e2e"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"eb33749ad4b99b3bee924e375b1e6450d89af3d4","unresolved":false,"context_lines":[{"line_number":587,"context_line":"        while status \u003d\u003d CLONE_PENDING:"},{"line_number":588,"context_line":"            status \u003d self._get_clone_status(share)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        if status \u003d\u003d CLONE_INPROGRESS:"},{"line_number":591,"context_line":"            model_update \u003d {"},{"line_number":592,"context_line":"                \u0027status\u0027: constants.STATUS_CREATING_FROM_SNAPSHOT,"},{"line_number":593,"context_line":"                # FIXME(vkmc) Fix progress when ceph backend has support"},{"line_number":594,"context_line":"                \u0027progress\u0027: \u0027progressing ...\u0027,"},{"line_number":595,"context_line":"                \u0027export_locations\u0027: {}"},{"line_number":596,"context_line":"            }"},{"line_number":597,"context_line":"        if status \u003d\u003d CLONE_COMPLETE:"},{"line_number":598,"context_line":"            model_update \u003d {"},{"line_number":599,"context_line":"                \u0027status\u0027: constants.STATUS_AVAILABLE,"},{"line_number":600,"context_line":"                \u0027progress\u0027: \u0027100%\u0027,"},{"line_number":601,"context_line":"                \u0027export_locations\u0027: self._get_export_locations(share)"},{"line_number":602,"context_line":"            }"},{"line_number":603,"context_line":"        return model_update"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"    def _get_clone_status(self, share):"},{"line_number":606,"context_line":"        \"\"\"Check the status of a newly cloned share.\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"fff29a37_15144d9e","line":603,"range":{"start_line":590,"start_character":8,"end_line":603,"end_character":27},"in_reply_to":"ed6d598d_a0072f3b","updated":"2021-03-22 23:45:14.000000000","message":"Done","commit_id":"8ae985d8b693975a79fc53433aeb97ce4cf59e2e"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"3124cdb7a73d298d59c42f7e436424b401a5e963","unresolved":true,"context_lines":[{"line_number":587,"context_line":"        while status \u003d\u003d CLONE_PENDING:"},{"line_number":588,"context_line":"            status \u003d self._get_clone_status(share)"},{"line_number":589,"context_line":""},{"line_number":590,"context_line":"        if status \u003d\u003d CLONE_INPROGRESS:"},{"line_number":591,"context_line":"            model_update \u003d {"},{"line_number":592,"context_line":"                \u0027status\u0027: constants.STATUS_CREATING_FROM_SNAPSHOT,"},{"line_number":593,"context_line":"                # FIXME(vkmc) Fix progress when ceph backend has support"},{"line_number":594,"context_line":"                \u0027progress\u0027: \u0027progressing ...\u0027,"},{"line_number":595,"context_line":"                \u0027export_locations\u0027: {}"},{"line_number":596,"context_line":"            }"},{"line_number":597,"context_line":"        if status \u003d\u003d CLONE_COMPLETE:"},{"line_number":598,"context_line":"            model_update \u003d {"},{"line_number":599,"context_line":"                \u0027status\u0027: constants.STATUS_AVAILABLE,"},{"line_number":600,"context_line":"                \u0027progress\u0027: \u0027100%\u0027,"},{"line_number":601,"context_line":"                \u0027export_locations\u0027: self._get_export_locations(share)"},{"line_number":602,"context_line":"            }"},{"line_number":603,"context_line":"        return model_update"},{"line_number":604,"context_line":""},{"line_number":605,"context_line":"    def _get_clone_status(self, share):"},{"line_number":606,"context_line":"        \"\"\"Check the status of a newly cloned share.\"\"\""}],"source_content_type":"text/x-python","patch_set":21,"id":"ed6d598d_a0072f3b","line":603,"range":{"start_line":590,"start_character":8,"end_line":603,"end_character":27},"in_reply_to":"f98746fb_a24fa319","updated":"2021-03-22 23:36:49.000000000","message":"Makes sense, will add a default model update","commit_id":"8ae985d8b693975a79fc53433aeb97ce4cf59e2e"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"7351955eafd16c0541ce2328ec5d0576229a21c5","unresolved":true,"context_lines":[{"line_number":314,"context_line":"        if share[\u0027share_group_id\u0027] is not None:"},{"line_number":315,"context_line":"            argdict.update({\"group_name\": share[\"share_group_id\"]})"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        out \u003d rados_command(self.rados_client, \"fs subvolume getpath\", argdict)"},{"line_number":318,"context_line":"        subvolume_path \u003d out.decode().strip()"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        return self.protocol_helper.get_export_locations(share, subvolume_path)"}],"source_content_type":"text/x-python","patch_set":25,"id":"b03c5c8e_2e3738a3","line":317,"updated":"2021-03-23 02:05:45.000000000","message":"We need to set subvolume_path as the result of the rados_command here directly instead of assigning it to \u0027out\u0027 and trying to decode it:\n\nhttps://zuul.opendev.org/t/openstack/build/6ef37079dcfb4015b8070046e0fc8da8/log/controller/logs/screen-m-shr.txt#500","commit_id":"1a1e3934949ed07906af311de49a2efd41efd61f"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"d1d9893befdebdcc20fd5ccb14c407491863ce98","unresolved":true,"context_lines":[{"line_number":314,"context_line":"        if share[\u0027share_group_id\u0027] is not None:"},{"line_number":315,"context_line":"            argdict.update({\"group_name\": share[\"share_group_id\"]})"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        out \u003d rados_command(self.rados_client, \"fs subvolume getpath\", argdict)"},{"line_number":318,"context_line":"        subvolume_path \u003d out.decode().strip()"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        return self.protocol_helper.get_export_locations(share, subvolume_path)"}],"source_content_type":"text/x-python","patch_set":25,"id":"d8387201_48a86931","line":317,"in_reply_to":"21fd9ec2_42795490","updated":"2021-03-23 13:42:09.000000000","message":"Thanks for fixing this Tom!","commit_id":"1a1e3934949ed07906af311de49a2efd41efd61f"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"cb9f31aeb7a3e88ed6b1d40f47f43a4487ffe25b","unresolved":true,"context_lines":[{"line_number":314,"context_line":"        if share[\u0027share_group_id\u0027] is not None:"},{"line_number":315,"context_line":"            argdict.update({\"group_name\": share[\"share_group_id\"]})"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        out \u003d rados_command(self.rados_client, \"fs subvolume getpath\", argdict)"},{"line_number":318,"context_line":"        subvolume_path \u003d out.decode().strip()"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        return self.protocol_helper.get_export_locations(share, subvolume_path)"}],"source_content_type":"text/x-python","patch_set":25,"id":"ed802ad4_7d7c6365","line":317,"in_reply_to":"b03c5c8e_2e3738a3","updated":"2021-03-23 02:31:41.000000000","message":"line 318 needs to be removed. rados_command() already does what 318 is doing","commit_id":"1a1e3934949ed07906af311de49a2efd41efd61f"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"cc48e2f5d2e9981a1bf887604bbc75ae25d114c8","unresolved":true,"context_lines":[{"line_number":314,"context_line":"        if share[\u0027share_group_id\u0027] is not None:"},{"line_number":315,"context_line":"            argdict.update({\"group_name\": share[\"share_group_id\"]})"},{"line_number":316,"context_line":""},{"line_number":317,"context_line":"        out \u003d rados_command(self.rados_client, \"fs subvolume getpath\", argdict)"},{"line_number":318,"context_line":"        subvolume_path \u003d out.decode().strip()"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        return self.protocol_helper.get_export_locations(share, subvolume_path)"}],"source_content_type":"text/x-python","patch_set":25,"id":"21fd9ec2_42795490","line":317,"in_reply_to":"ed802ad4_7d7c6365","updated":"2021-03-23 10:04:47.000000000","message":"I\u0027m going to go on and push up the fix for this issue.","commit_id":"1a1e3934949ed07906af311de49a2efd41efd61f"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d0af5df5e9b9402470890014ba1bd270edf53b8e","unresolved":true,"context_lines":[{"line_number":103,"context_line":"               default\u003d\"/volumes\","},{"line_number":104,"context_line":"               help\u003d\"The prefix of the cephfs volume path.\""},{"line_number":105,"context_line":"               ),"},{"line_number":106,"context_line":"    cfg.BoolOpt(\u0027cephfs_enable_snapshots\u0027,"},{"line_number":107,"context_line":"                deprecated_for_removal\u003dTrue,"},{"line_number":108,"context_line":"                deprecated_since\u003d\u0027Victoria\u0027,"},{"line_number":109,"context_line":"                deprecated_reason\u003d\u0027CephFS snapshots are fully supported \u0027"},{"line_number":110,"context_line":"                                  \u0027since the Nautilus release of Ceph.\u0027,"},{"line_number":111,"context_line":"                default\u003dTrue,"},{"line_number":112,"context_line":"                help\u003d\"Whether to enable snapshots in this driver.\""},{"line_number":113,"context_line":"                ),"},{"line_number":114,"context_line":"    cfg.StrOpt(\u0027cephfs_protocol_helper_type\u0027,"},{"line_number":115,"context_line":"               default\u003d\"CEPHFS\","},{"line_number":116,"context_line":"               choices\u003d[\u0027CEPHFS\u0027, \u0027NFS\u0027],"}],"source_content_type":"text/x-python","patch_set":28,"id":"9a0eba28_6386ea82","line":113,"range":{"start_line":106,"start_character":4,"end_line":113,"end_character":18},"updated":"2021-03-24 01:44:35.000000000","message":"Looks like you\u0027re dropping this in code 👊\nLets torch this option too and call it out in the release notes","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d0af5df5e9b9402470890014ba1bd270edf53b8e","unresolved":true,"context_lines":[{"line_number":148,"context_line":"    cfg.StrOpt(\u0027cephfs_filesystem_name\u0027,"},{"line_number":149,"context_line":"               help\u003d\"The name of the filesystem to use, if there are \""},{"line_number":150,"context_line":"                    \"multiple filesystems in the cluster.\"),"},{"line_number":151,"context_line":"    cfg.IntOpt(\u0027cephfs_clone_status_retries\u0027, default\u003d3,"},{"line_number":152,"context_line":"               help\u003d\"Number of times to retry getting clone status \""},{"line_number":153,"context_line":"                    \"while the status is CLONE_PENDING.\"),"},{"line_number":154,"context_line":"    cfg.IntOpt(\u0027cephfs_clone_status_query_interval\u0027, default\u003d5,"},{"line_number":155,"context_line":"               help\u003d\"Interval value (in seconds) between retries \""},{"line_number":156,"context_line":"                    \"when querying cephfs subvolume clone status.\"),"}],"source_content_type":"text/x-python","patch_set":28,"id":"73d860b7_0543925c","line":153,"range":{"start_line":151,"start_character":0,"end_line":153,"end_character":58},"updated":"2021-03-24 01:44:35.000000000","message":"The values these opts have allow the driver to wait for under 20 seconds; could we use the defaults from the retry decorator? [1] (interval\u003d1, retries\u003d10, backoff_rate\u003d2 \u003d\u003d\u003e ~9 minutes) and fail if we can\u0027t get the clone to transition to \"creating\" state? \n\nUser would just have to delete their prior share and retry? Or are we unsure if 9 minutes would be insufficient? \n\n[1] https://github.com/openstack/manila/blob/3e855d5f60d19dc0ce96fe0e561891e98f75557b/manila/utils.py#L450-L451","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"263dbc6adf65a2a15427d3f89224e120dd46f9c0","unresolved":false,"context_lines":[{"line_number":148,"context_line":"    cfg.StrOpt(\u0027cephfs_filesystem_name\u0027,"},{"line_number":149,"context_line":"               help\u003d\"The name of the filesystem to use, if there are \""},{"line_number":150,"context_line":"                    \"multiple filesystems in the cluster.\"),"},{"line_number":151,"context_line":"    cfg.IntOpt(\u0027cephfs_clone_status_retries\u0027, default\u003d3,"},{"line_number":152,"context_line":"               help\u003d\"Number of times to retry getting clone status \""},{"line_number":153,"context_line":"                    \"while the status is CLONE_PENDING.\"),"},{"line_number":154,"context_line":"    cfg.IntOpt(\u0027cephfs_clone_status_query_interval\u0027, default\u003d5,"},{"line_number":155,"context_line":"               help\u003d\"Interval value (in seconds) between retries \""},{"line_number":156,"context_line":"                    \"when querying cephfs subvolume clone status.\"),"}],"source_content_type":"text/x-python","patch_set":28,"id":"d89e9154_51cfcf54","line":153,"range":{"start_line":151,"start_character":0,"end_line":153,"end_character":58},"in_reply_to":"73d860b7_0543925c","updated":"2021-03-24 17:22:29.000000000","message":"Agree. In my experience the clone is in PENDING state for a second or so.  I suspect I got stuck on treating PENDING as special before I got to dealing with the bigger wait for CLONE_INPROGRESS but as your remarks suggest there may be no need to do synchronous retrying at all.","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d0af5df5e9b9402470890014ba1bd270edf53b8e","unresolved":true,"context_lines":[{"line_number":151,"context_line":"    cfg.IntOpt(\u0027cephfs_clone_status_retries\u0027, default\u003d3,"},{"line_number":152,"context_line":"               help\u003d\"Number of times to retry getting clone status \""},{"line_number":153,"context_line":"                    \"while the status is CLONE_PENDING.\"),"},{"line_number":154,"context_line":"    cfg.IntOpt(\u0027cephfs_clone_status_query_interval\u0027, default\u003d5,"},{"line_number":155,"context_line":"               help\u003d\"Interval value (in seconds) between retries \""},{"line_number":156,"context_line":"                    \"when querying cephfs subvolume clone status.\"),"},{"line_number":157,"context_line":"]"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"17ff55a8_c41712c4","line":156,"range":{"start_line":154,"start_character":4,"end_line":156,"end_character":68},"updated":"2021-03-24 01:44:35.000000000","message":"Do we really need this? it seeds the exponential back-off, so we can just set it to 5 seconds, and live with it?","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d0af5df5e9b9402470890014ba1bd270edf53b8e","unresolved":true,"context_lines":[{"line_number":467,"context_line":"        argdict \u003d {"},{"line_number":468,"context_line":"            \"vol_name\": self.volname,"},{"line_number":469,"context_line":"            \"sub_name\": share[\"id\"],"},{"line_number":470,"context_line":"            # We want to clean up the back end even if the subvolume is"},{"line_number":471,"context_line":"            # not in a good state."},{"line_number":472,"context_line":"            \"force\": True,"},{"line_number":473,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":28,"id":"2fe28c7a_78dcc4b4","line":470,"range":{"start_line":470,"start_character":46,"end_line":470,"end_character":47},"updated":"2021-03-24 01:44:35.000000000","message":"nit: share","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"263dbc6adf65a2a15427d3f89224e120dd46f9c0","unresolved":false,"context_lines":[{"line_number":467,"context_line":"        argdict \u003d {"},{"line_number":468,"context_line":"            \"vol_name\": self.volname,"},{"line_number":469,"context_line":"            \"sub_name\": share[\"id\"],"},{"line_number":470,"context_line":"            # We want to clean up the back end even if the subvolume is"},{"line_number":471,"context_line":"            # not in a good state."},{"line_number":472,"context_line":"            \"force\": True,"},{"line_number":473,"context_line":"        }"}],"source_content_type":"text/x-python","patch_set":28,"id":"8039a0d9_08c78308","line":470,"range":{"start_line":470,"start_character":46,"end_line":470,"end_character":47},"in_reply_to":"2fe28c7a_78dcc4b4","updated":"2021-03-24 17:22:29.000000000","message":"Ack","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d0af5df5e9b9402470890014ba1bd270edf53b8e","unresolved":true,"context_lines":[{"line_number":639,"context_line":"        out \u003d rados_command(self.rados_client,"},{"line_number":640,"context_line":"                            \"fs clone status\", argdict, True)"},{"line_number":641,"context_line":"        status \u003d out[\u0027status\u0027][\u0027state\u0027]"},{"line_number":642,"context_line":"        if status not in CLONE_STATUSES:"},{"line_number":643,"context_line":"            raise exception.ShareBackendException("},{"line_number":644,"context_line":"                \"[%(be)s] rados client returned unexpected clone \""},{"line_number":645,"context_line":"                \"status [%(st)s]!\" %"},{"line_number":646,"context_line":"                {\"be\": self.backend_name, \"st\": status})"},{"line_number":647,"context_line":"        # When a subvolume is cloned, it first into CLONE_PENDING STATE"},{"line_number":648,"context_line":"        # We throw an exception here to trigger a retry with a countdown"},{"line_number":649,"context_line":"        # rather than just treating CLONE_PENDING as an indication that"}],"source_content_type":"text/x-python","patch_set":28,"id":"d2d39a45_ec2cec6e","line":646,"range":{"start_line":642,"start_character":8,"end_line":646,"end_character":51},"updated":"2021-03-24 01:44:35.000000000","message":"opinion: this check puts a hard dependency on the state machine in Ceph - what if they introduce and expose a micro-state? What problems does this check solve? We\u0027re checking for the states we care about on lines 652 and 663?","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"263dbc6adf65a2a15427d3f89224e120dd46f9c0","unresolved":true,"context_lines":[{"line_number":639,"context_line":"        out \u003d rados_command(self.rados_client,"},{"line_number":640,"context_line":"                            \"fs clone status\", argdict, True)"},{"line_number":641,"context_line":"        status \u003d out[\u0027status\u0027][\u0027state\u0027]"},{"line_number":642,"context_line":"        if status not in CLONE_STATUSES:"},{"line_number":643,"context_line":"            raise exception.ShareBackendException("},{"line_number":644,"context_line":"                \"[%(be)s] rados client returned unexpected clone \""},{"line_number":645,"context_line":"                \"status [%(st)s]!\" %"},{"line_number":646,"context_line":"                {\"be\": self.backend_name, \"st\": status})"},{"line_number":647,"context_line":"        # When a subvolume is cloned, it first into CLONE_PENDING STATE"},{"line_number":648,"context_line":"        # We throw an exception here to trigger a retry with a countdown"},{"line_number":649,"context_line":"        # rather than just treating CLONE_PENDING as an indication that"}],"source_content_type":"text/x-python","patch_set":28,"id":"b81a70bb_2e325f93","line":646,"range":{"start_line":642,"start_character":8,"end_line":646,"end_character":51},"in_reply_to":"d2d39a45_ec2cec6e","updated":"2021-03-24 17:22:29.000000000","message":"Good point.","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d0af5df5e9b9402470890014ba1bd270edf53b8e","unresolved":true,"context_lines":[{"line_number":644,"context_line":"                \"[%(be)s] rados client returned unexpected clone \""},{"line_number":645,"context_line":"                \"status [%(st)s]!\" %"},{"line_number":646,"context_line":"                {\"be\": self.backend_name, \"st\": status})"},{"line_number":647,"context_line":"        # When a subvolume is cloned, it first into CLONE_PENDING STATE"},{"line_number":648,"context_line":"        # We throw an exception here to trigger a retry with a countdown"},{"line_number":649,"context_line":"        # rather than just treating CLONE_PENDING as an indication that"},{"line_number":650,"context_line":"        # the clone operation is progressing since we need to be able"}],"source_content_type":"text/x-python","patch_set":28,"id":"4fdbb01b_79c7efca","line":647,"range":{"start_line":647,"start_character":46,"end_line":647,"end_character":47},"updated":"2021-03-24 01:44:35.000000000","message":"nit: goes","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"263dbc6adf65a2a15427d3f89224e120dd46f9c0","unresolved":false,"context_lines":[{"line_number":644,"context_line":"                \"[%(be)s] rados client returned unexpected clone \""},{"line_number":645,"context_line":"                \"status [%(st)s]!\" %"},{"line_number":646,"context_line":"                {\"be\": self.backend_name, \"st\": status})"},{"line_number":647,"context_line":"        # When a subvolume is cloned, it first into CLONE_PENDING STATE"},{"line_number":648,"context_line":"        # We throw an exception here to trigger a retry with a countdown"},{"line_number":649,"context_line":"        # rather than just treating CLONE_PENDING as an indication that"},{"line_number":650,"context_line":"        # the clone operation is progressing since we need to be able"}],"source_content_type":"text/x-python","patch_set":28,"id":"c97de777_401380ba","line":647,"range":{"start_line":647,"start_character":46,"end_line":647,"end_character":47},"in_reply_to":"4fdbb01b_79c7efca","updated":"2021-03-24 17:22:29.000000000","message":"Ack","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d0af5df5e9b9402470890014ba1bd270edf53b8e","unresolved":true,"context_lines":[{"line_number":647,"context_line":"        # When a subvolume is cloned, it first into CLONE_PENDING STATE"},{"line_number":648,"context_line":"        # We throw an exception here to trigger a retry with a countdown"},{"line_number":649,"context_line":"        # rather than just treating CLONE_PENDING as an indication that"},{"line_number":650,"context_line":"        # the clone operation is progressing since we need to be able"},{"line_number":651,"context_line":"        # to treat a clone stuck in CLONE_PENDING state as an error."},{"line_number":652,"context_line":"        if status \u003d\u003d CLONE_PENDING:"},{"line_number":653,"context_line":"            raise exception.RetryAgainException(\"_get_clone_status\")"},{"line_number":654,"context_line":"        return status"}],"source_content_type":"text/x-python","patch_set":28,"id":"f20a5d02_b363d0c9","line":651,"range":{"start_line":650,"start_character":51,"end_line":651,"end_character":67},"updated":"2021-03-24 01:44:35.000000000","message":"Can I understand why? Is this a bug/behavior in ceph that we need to work around?","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"263dbc6adf65a2a15427d3f89224e120dd46f9c0","unresolved":false,"context_lines":[{"line_number":647,"context_line":"        # When a subvolume is cloned, it first into CLONE_PENDING STATE"},{"line_number":648,"context_line":"        # We throw an exception here to trigger a retry with a countdown"},{"line_number":649,"context_line":"        # rather than just treating CLONE_PENDING as an indication that"},{"line_number":650,"context_line":"        # the clone operation is progressing since we need to be able"},{"line_number":651,"context_line":"        # to treat a clone stuck in CLONE_PENDING state as an error."},{"line_number":652,"context_line":"        if status \u003d\u003d CLONE_PENDING:"},{"line_number":653,"context_line":"            raise exception.RetryAgainException(\"_get_clone_status\")"},{"line_number":654,"context_line":"        return status"}],"source_content_type":"text/x-python","patch_set":28,"id":"555e028e_838fb972","line":651,"range":{"start_line":650,"start_character":51,"end_line":651,"end_character":67},"in_reply_to":"f20a5d02_b363d0c9","updated":"2021-03-24 17:22:29.000000000","message":"When I think about it, there is really no difference than a clone stuck in CLONE_INPROGRESS forever.\n\nMaybe the approach to the stuck in transition issue is to work with the CephFS folks to get information so that we can actually calculate progress % and supply an API for cancellation from the Manila side.  We\u0027ll want to do this consistently with e.g. similar async operations with other back ends like NetApp who also are not yet showing progress percentage.","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d0af5df5e9b9402470890014ba1bd270edf53b8e","unresolved":true,"context_lines":[{"line_number":649,"context_line":"        # rather than just treating CLONE_PENDING as an indication that"},{"line_number":650,"context_line":"        # the clone operation is progressing since we need to be able"},{"line_number":651,"context_line":"        # to treat a clone stuck in CLONE_PENDING state as an error."},{"line_number":652,"context_line":"        if status \u003d\u003d CLONE_PENDING:"},{"line_number":653,"context_line":"            raise exception.RetryAgainException(\"_get_clone_status\")"},{"line_number":654,"context_line":"        return status"},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"    def _update_create_from_snapshot_status(self, share):"}],"source_content_type":"text/x-python","patch_set":28,"id":"63a34abe_9417e8c3","line":653,"range":{"start_line":652,"start_character":8,"end_line":653,"end_character":68},"updated":"2021-03-24 01:44:35.000000000","message":"Lets think about this a bit.. This waiter is quite dangerous to add to a periodic task. The assumption on get_share_status is that it returns quickly.\nAll periodic tasks are meant to return as soon as possible because they\u0027re run on threads that get spawned at absolute regular intervals. \n\nSo imagine this retry makes a 60-second (default value of \"CONF.periodic_interval\") periodic task wait for a couple of minutes - so while it is running two other calls will come into the driver to get_share_status() and if the status continues to be \"pending\" those threads are set to wait as well. \n\nCan we instead just allow PENDING to be treated like \"CLONE_INPROGRESS\" (lines 667-670) instead?","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"bccf29d441e63539a240071c526ba523c9238ad5","unresolved":true,"context_lines":[{"line_number":649,"context_line":"        # rather than just treating CLONE_PENDING as an indication that"},{"line_number":650,"context_line":"        # the clone operation is progressing since we need to be able"},{"line_number":651,"context_line":"        # to treat a clone stuck in CLONE_PENDING state as an error."},{"line_number":652,"context_line":"        if status \u003d\u003d CLONE_PENDING:"},{"line_number":653,"context_line":"            raise exception.RetryAgainException(\"_get_clone_status\")"},{"line_number":654,"context_line":"        return status"},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"    def _update_create_from_snapshot_status(self, share):"}],"source_content_type":"text/x-python","patch_set":28,"id":"791b958b_a607c3e3","line":653,"range":{"start_line":652,"start_character":8,"end_line":653,"end_character":68},"in_reply_to":"63a34abe_9417e8c3","updated":"2021-03-24 03:06:00.000000000","message":"\u003e Can we instead just allow PENDING to be treated like \"CLONE_INPROGRESS\" (lines 667-670) instead?\n\nGood point. I think we can do this.","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"263dbc6adf65a2a15427d3f89224e120dd46f9c0","unresolved":false,"context_lines":[{"line_number":649,"context_line":"        # rather than just treating CLONE_PENDING as an indication that"},{"line_number":650,"context_line":"        # the clone operation is progressing since we need to be able"},{"line_number":651,"context_line":"        # to treat a clone stuck in CLONE_PENDING state as an error."},{"line_number":652,"context_line":"        if status \u003d\u003d CLONE_PENDING:"},{"line_number":653,"context_line":"            raise exception.RetryAgainException(\"_get_clone_status\")"},{"line_number":654,"context_line":"        return status"},{"line_number":655,"context_line":""},{"line_number":656,"context_line":"    def _update_create_from_snapshot_status(self, share):"}],"source_content_type":"text/x-python","patch_set":28,"id":"04279cd3_3bd6faf9","line":653,"range":{"start_line":652,"start_character":8,"end_line":653,"end_character":68},"in_reply_to":"63a34abe_9417e8c3","updated":"2021-03-24 17:22:29.000000000","message":"You have convinced me.","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"bccf29d441e63539a240071c526ba523c9238ad5","unresolved":true,"context_lines":[{"line_number":703,"context_line":"        argdict \u003d {"},{"line_number":704,"context_line":"            \"vol_name\": self.volname,"},{"line_number":705,"context_line":"            \"sub_name\": parent_share[\"id\"],"},{"line_number":706,"context_line":"            \"snap_name\": \u0027_\u0027.join([snapshot[\"snapshot_id\"], snapshot[\"id\"]]),"},{"line_number":707,"context_line":"            \"target_sub_name\": share[\"id\"]"},{"line_number":708,"context_line":"        }"},{"line_number":709,"context_line":""}],"source_content_type":"text/x-python","patch_set":28,"id":"2e36a628_2c60bd26","line":706,"updated":"2021-03-24 03:06:00.000000000","message":"group_name is missing?","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"263dbc6adf65a2a15427d3f89224e120dd46f9c0","unresolved":true,"context_lines":[{"line_number":420,"context_line":"        except rados.Error as e:"},{"line_number":421,"context_line":"            # if it is not a share created from a snapshot (a clone)"},{"line_number":422,"context_line":"            # we will get ENOSUP error when trying to access to its status"},{"line_number":423,"context_line":"            if e.errno !\u003d -errno.ENOTSUP:"},{"line_number":424,"context_line":"                raise exception.ShareBackendException("},{"line_number":425,"context_line":"                    \"Failed to remove share.\")"},{"line_number":426,"context_line":""}],"source_content_type":"text/x-python","patch_set":29,"id":"4d9632cd_356d1a1f","line":423,"updated":"2021-03-24 17:22:29.000000000","message":"We may be getting a different errno than that we\u0027re checking for here.  \n\nhttps://zuul.opendev.org/t/openstack/build/c4cd49bcaf154bd79de6fc0fee604da9/log/controller/logs/screen-m-shr.txt?severity\u003d4#525\n\nWill investigate.","commit_id":"68c120a891253619a0b272fcec30e291d1e9ba4b"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"373dbc066840d0fd3accc43301d1a1925e18ba3c","unresolved":true,"context_lines":[{"line_number":631,"context_line":"        elif status in (CLONE_PENDING, CLONE_INPROGRESS):"},{"line_number":632,"context_line":"            updates[\u0027status\u0027] \u003d constants.STATUS_CREATING_FROM_SNAPSHOT"},{"line_number":633,"context_line":"            # FIXME(vkmc) Fix progress when ceph backend has support"},{"line_number":634,"context_line":"            updates[\u0027progress\u0027] \u003d \u0027progressing ...\u0027"},{"line_number":635,"context_line":"        else:"},{"line_number":636,"context_line":"            # error if clone operation is not progressing or completed"},{"line_number":637,"context_line":"            raise exception.ShareBackendException("}],"source_content_type":"text/x-python","patch_set":30,"id":"7394628b_49d07fca","line":634,"range":{"start_line":634,"start_character":34,"end_line":634,"end_character":51},"updated":"2021-03-24 19:16:59.000000000","message":"This is a weird update, but this field is not for automation. I wish we kept it at 50% for a while while we can\u0027t tell what\u0027s going on?\n\nSo ideally it goes from 0-50-50-50-50-100 for instance.","commit_id":"a3fdb7323f232cdd436740bff1c386e5e9fa4a3e"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"d3967ba4af1aa118470db73a7de1688733a48df3","unresolved":true,"context_lines":[{"line_number":631,"context_line":"        elif status in (CLONE_PENDING, CLONE_INPROGRESS):"},{"line_number":632,"context_line":"            updates[\u0027status\u0027] \u003d constants.STATUS_CREATING_FROM_SNAPSHOT"},{"line_number":633,"context_line":"            # FIXME(vkmc) Fix progress when ceph backend has support"},{"line_number":634,"context_line":"            updates[\u0027progress\u0027] \u003d \u0027progressing ...\u0027"},{"line_number":635,"context_line":"        else:"},{"line_number":636,"context_line":"            # error if clone operation is not progressing or completed"},{"line_number":637,"context_line":"            raise exception.ShareBackendException("}],"source_content_type":"text/x-python","patch_set":30,"id":"a07699f6_45ac0d51","line":634,"range":{"start_line":634,"start_character":34,"end_line":634,"end_character":51},"in_reply_to":"432b034d_3de9dca3","updated":"2021-03-24 21:44:39.000000000","message":"🥁","commit_id":"a3fdb7323f232cdd436740bff1c386e5e9fa4a3e"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"6e1d0da2a4e8fc49606202b12e07d61cb02a6a90","unresolved":true,"context_lines":[{"line_number":631,"context_line":"        elif status in (CLONE_PENDING, CLONE_INPROGRESS):"},{"line_number":632,"context_line":"            updates[\u0027status\u0027] \u003d constants.STATUS_CREATING_FROM_SNAPSHOT"},{"line_number":633,"context_line":"            # FIXME(vkmc) Fix progress when ceph backend has support"},{"line_number":634,"context_line":"            updates[\u0027progress\u0027] \u003d \u0027progressing ...\u0027"},{"line_number":635,"context_line":"        else:"},{"line_number":636,"context_line":"            # error if clone operation is not progressing or completed"},{"line_number":637,"context_line":"            raise exception.ShareBackendException("}],"source_content_type":"text/x-python","patch_set":30,"id":"432b034d_3de9dca3","line":634,"range":{"start_line":634,"start_character":34,"end_line":634,"end_character":51},"in_reply_to":"7394628b_49d07fca","updated":"2021-03-24 20:32:23.000000000","message":"We can set it to 50% as you suggest here or drop this line and leave it at 0% as (I think) you suggested in today\u0027s standup.  Either is fine with me.","commit_id":"a3fdb7323f232cdd436740bff1c386e5e9fa4a3e"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c80b75b66c0bf10dd430a371352c4a1e7511d177","unresolved":true,"context_lines":[{"line_number":631,"context_line":"        elif status in (CLONE_PENDING, CLONE_INPROGRESS):"},{"line_number":632,"context_line":"            updates[\u0027status\u0027] \u003d constants.STATUS_CREATING_FROM_SNAPSHOT"},{"line_number":633,"context_line":"            # FIXME(vkmc) Fix progress when ceph backend has support"},{"line_number":634,"context_line":"            updates[\u0027progress\u0027] \u003d \u0027progressing ...\u0027"},{"line_number":635,"context_line":"        else:"},{"line_number":636,"context_line":"            # error if clone operation is not progressing or completed"},{"line_number":637,"context_line":"            raise exception.ShareBackendException("}],"source_content_type":"text/x-python","patch_set":30,"id":"f68ba8b1_9f16351b","line":634,"range":{"start_line":634,"start_character":34,"end_line":634,"end_character":51},"in_reply_to":"a07699f6_45ac0d51","updated":"2021-03-24 21:55:20.000000000","message":"Let\u0027s leave it out - the 50% thing will make users wonder if something got stuck. The handler code in the share manager still performs updates if the status remains \"creating_from_snapshot\" - users could be told to check the \"updated_at\" timestamp to see if the clone is in progress. Some day if/when ceph allows us access to capture true progress, we can fix this up.. \n\nhttps://github.com/openstack/manila/blob/2bc27c5678945d92ffd6b885eeaf6f86c9f16f8c/manila/share/manager.py#L4852-L4866","commit_id":"a3fdb7323f232cdd436740bff1c386e5e9fa4a3e"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"50a83e8de5c3c53e0d464bc5634f80d8085939b4","unresolved":true,"context_lines":[{"line_number":631,"context_line":"        elif status in (CLONE_PENDING, CLONE_INPROGRESS):"},{"line_number":632,"context_line":"            updates[\u0027status\u0027] \u003d constants.STATUS_CREATING_FROM_SNAPSHOT"},{"line_number":633,"context_line":"            # FIXME(vkmc) Fix progress when ceph backend has support"},{"line_number":634,"context_line":"            updates[\u0027progress\u0027] \u003d \u0027progressing ...\u0027"},{"line_number":635,"context_line":"        else:"},{"line_number":636,"context_line":"            # error if clone operation is not progressing or completed"},{"line_number":637,"context_line":"            raise exception.ShareBackendException("}],"source_content_type":"text/x-python","patch_set":30,"id":"660ba2e2_3511bf09","line":634,"range":{"start_line":634,"start_character":34,"end_line":634,"end_character":51},"in_reply_to":"f68ba8b1_9f16351b","updated":"2021-03-24 22:02:46.000000000","message":"That\u0027s a good point. +1 on changing percentages for words, so it doesn\u0027t look like stalled.","commit_id":"a3fdb7323f232cdd436740bff1c386e5e9fa4a3e"}],"releasenotes/notes/bp-create-share-from-snapshot-cephfs-080bd6c2ece74c5b.yaml":[{"author":{"_account_id":8056,"name":"Ramana Raja","email":"rraja@redhat.com","username":"Ram_Raja"},"change_message_id":"e325993ffa70dc999a4a2e5f158c9e6069b76469","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Create share from snapshot is now available in CephFS Native and CephFS NFS"},{"line_number":5,"context_line":"    drivers. This feature is available in Ceph since the Ceph Nautilus release,"},{"line_number":6,"context_line":"    so a deployment with Ceph Nautilus (v14.2.10) is required."}],"source_content_type":"text/x-yaml","patch_set":28,"id":"7723c812_76ed8ce4","line":6,"updated":"2021-03-24 03:22:37.000000000","message":"This patchset is dependent on https://review.opendev.org/c/openstack/manila/+/779619/, which requires at least Ceph octopus v15.2.10 or nautilus v14.2.18","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":6413,"name":"Victoria Martinez de la Cruz","email":"victoria@redhat.com","username":"vkmc"},"change_message_id":"d3967ba4af1aa118470db73a7de1688733a48df3","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Create share from snapshot is now available in CephFS Native and CephFS NFS"},{"line_number":5,"context_line":"    drivers. This feature is available in Ceph since the Ceph Nautilus release,"},{"line_number":6,"context_line":"    so a deployment with Ceph Nautilus (v14.2.10) is required."}],"source_content_type":"text/x-yaml","patch_set":28,"id":"a31a9114_0c204b8e","line":6,"in_reply_to":"7723c812_76ed8ce4","updated":"2021-03-24 21:44:39.000000000","message":"Ack","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"263dbc6adf65a2a15427d3f89224e120dd46f9c0","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Create share from snapshot is now available in CephFS Native and CephFS NFS"},{"line_number":5,"context_line":"    drivers. This feature is available in Ceph since the Ceph Nautilus release,"},{"line_number":6,"context_line":"    so a deployment with Ceph Nautilus (v14.2.10) is required."}],"source_content_type":"text/x-yaml","patch_set":28,"id":"232b555c_8c4b887a","line":6,"in_reply_to":"7723c812_76ed8ce4","updated":"2021-03-24 17:22:29.000000000","message":"Will make this release note consistent with the requirements you cite.","commit_id":"61f562210ab7f00ee96128a8110d4734a137a621"}]}
