)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"f2ec61d184616c41a17eb66540dc2584f1739abf","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch improves the operation of creating share from snapshot"},{"line_number":10,"context_line":"to accept new destinations that can be different pools or"},{"line_number":11,"context_line":"back ends."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Change-Id: Id3b3d5860d6325f368cbebfe7f97c98d64554d72"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"df33271e_7371a344","line":12,"range":{"start_line":12,"start_character":0,"end_line":12,"end_character":0},"updated":"2020-04-09 08:06:02.000000000","message":"This needs to depend on the feature change, else it\u0027ll fail regression/unit tests.","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"}],"manila/share/drivers/netapp/dataontap/client/client_cmode.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"819c13bcbb0dc384ab19a5d060d5898624350752","unresolved":false,"context_lines":[{"line_number":2251,"context_line":""},{"line_number":2252,"context_line":"    @na_utils.trace"},{"line_number":2253,"context_line":"    def get_volume_clone_parent_snaphot(self, volume_name):"},{"line_number":2254,"context_line":"        \"\"\"Gets Volume\u0027s clone parent."},{"line_number":2255,"context_line":""},{"line_number":2256,"context_line":"        Return the snapshot name of a volume\u0027s clone parent, or None if it"},{"line_number":2257,"context_line":"        doesn\u0027t exist."}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_b8806848","line":2254,"range":{"start_line":2254,"start_character":16,"end_line":2254,"end_character":24},"updated":"2020-04-07 15:57:43.000000000","message":"nit: lower case ``volume\u0027s``","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"1b96422a209b212a72a6f072c365d415b35eaf89","unresolved":false,"context_lines":[{"line_number":2251,"context_line":""},{"line_number":2252,"context_line":"    @na_utils.trace"},{"line_number":2253,"context_line":"    def get_volume_clone_parent_snaphot(self, volume_name):"},{"line_number":2254,"context_line":"        \"\"\"Gets Volume\u0027s clone parent."},{"line_number":2255,"context_line":""},{"line_number":2256,"context_line":"        Return the snapshot name of a volume\u0027s clone parent, or None if it"},{"line_number":2257,"context_line":"        doesn\u0027t exist."}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_da76c4a4","line":2254,"range":{"start_line":2254,"start_character":16,"end_line":2254,"end_character":24},"in_reply_to":"df33271e_b8806848","updated":"2020-04-09 03:37:45.000000000","message":"Done","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"}],"manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py":[{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"44636824ea2e08f34f3b505ee66b668bd440918a","unresolved":false,"context_lines":[{"line_number":710,"context_line":"                    share_name, filesys_size_fixed\u003dFalse)"},{"line_number":711,"context_line":"                return_values[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"},{"line_number":712,"context_line":"        else:"},{"line_number":713,"context_line":"            LOG.warning(\"Caught an unexpected share creation state. Skipping.\")"},{"line_number":714,"context_line":""},{"line_number":715,"context_line":"        if return_values[\u0027status\u0027] \u003d\u003d constants.STATUS_AVAILABLE:"},{"line_number":716,"context_line":"            self.private_storage.delete(share[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_355e0ce6","line":713,"range":{"start_line":713,"start_character":32,"end_line":713,"end_character":66},"updated":"2020-03-26 19:49:24.000000000","message":"it may be helpful to log the current_state in this case","commit_id":"ac34f3ac83511fbbc8174f790b0b64de1a47c756"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4954fa5d6c21bc251b0d532428e382044d4a2cbb","unresolved":false,"context_lines":[{"line_number":710,"context_line":"                    share_name, filesys_size_fixed\u003dFalse)"},{"line_number":711,"context_line":"                return_values[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"},{"line_number":712,"context_line":"        else:"},{"line_number":713,"context_line":"            LOG.warning(\"Caught an unexpected share creation state. Skipping.\")"},{"line_number":714,"context_line":""},{"line_number":715,"context_line":"        if return_values[\u0027status\u0027] \u003d\u003d constants.STATUS_AVAILABLE:"},{"line_number":716,"context_line":"            self.private_storage.delete(share[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_c365efb6","line":713,"range":{"start_line":713,"start_character":32,"end_line":713,"end_character":66},"in_reply_to":"df33271e_355e0ce6","updated":"2020-04-01 23:33:18.000000000","message":"sure, done, thanks!","commit_id":"ac34f3ac83511fbbc8174f790b0b64de1a47c756"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"44636824ea2e08f34f3b505ee66b668bd440918a","unresolved":false,"context_lines":[{"line_number":2630,"context_line":"                self._apply_snapdir_visibility("},{"line_number":2631,"context_line":"                    hide_snapdir, share_name, vserver_client)"},{"line_number":2632,"context_line":""},{"line_number":2633,"context_line":"    def get_share_status(self, share, share_server\u003dNone):"},{"line_number":2634,"context_line":"        if share[\u0027status\u0027] \u003d\u003d constants.STATUS_CREATING_FROM_SNAPSHOT:"},{"line_number":2635,"context_line":"            return self._update_create_from_snapshot_status(share,"},{"line_number":2636,"context_line":"                                                            share_server)"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_b5c5fc5d","line":2633,"range":{"start_line":2633,"start_character":8,"end_line":2633,"end_character":24},"updated":"2020-03-26 19:49:24.000000000","message":"this is not a pure getter method, something like `update_create_from_snapshot_status` is a bit clunky, but would describe better what happens imho","commit_id":"ac34f3ac83511fbbc8174f790b0b64de1a47c756"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4954fa5d6c21bc251b0d532428e382044d4a2cbb","unresolved":false,"context_lines":[{"line_number":2630,"context_line":"                self._apply_snapdir_visibility("},{"line_number":2631,"context_line":"                    hide_snapdir, share_name, vserver_client)"},{"line_number":2632,"context_line":""},{"line_number":2633,"context_line":"    def get_share_status(self, share, share_server\u003dNone):"},{"line_number":2634,"context_line":"        if share[\u0027status\u0027] \u003d\u003d constants.STATUS_CREATING_FROM_SNAPSHOT:"},{"line_number":2635,"context_line":"            return self._update_create_from_snapshot_status(share,"},{"line_number":2636,"context_line":"                                                            share_server)"}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_c3a68fc1","line":2633,"range":{"start_line":2633,"start_character":8,"end_line":2633,"end_character":24},"in_reply_to":"df33271e_b5c5fc5d","updated":"2020-04-01 23:33:18.000000000","message":"Yes, this interface is being proposed here[1] and its supposed to retrieve the current status of a share.\nSince we don\u0027t have other internal periodic threads to move forward this creation process (and I think that we shouldn\u0027t because can bring issues in the future with active/active) we decide to use this call.\nA better name could be \u0027update_share_status\u0027, something like that. The idea is to use it for other share \u0027pending\u0027 operation, not only creating_from_snapshot.\nThanks for asking!\n\n[1] https://review.opendev.org/#/c/709697/","commit_id":"ac34f3ac83511fbbc8174f790b0b64de1a47c756"},{"author":{"_account_id":18816,"name":"Maurice Escher","display_name":"carthaca","email":"maurice.escher@sap.com","username":"mapocace"},"change_message_id":"44636824ea2e08f34f3b505ee66b668bd440918a","unresolved":false,"context_lines":[{"line_number":2631,"context_line":"                    hide_snapdir, share_name, vserver_client)"},{"line_number":2632,"context_line":""},{"line_number":2633,"context_line":"    def get_share_status(self, share, share_server\u003dNone):"},{"line_number":2634,"context_line":"        if share[\u0027status\u0027] \u003d\u003d constants.STATUS_CREATING_FROM_SNAPSHOT:"},{"line_number":2635,"context_line":"            return self._update_create_from_snapshot_status(share,"},{"line_number":2636,"context_line":"                                                            share_server)"},{"line_number":2637,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_f58dc431","line":2634,"range":{"start_line":2634,"start_character":8,"end_line":2634,"end_character":26},"updated":"2020-03-26 19:49:24.000000000","message":"returning nothing in the \u0027else\u0027 case is unexpected","commit_id":"ac34f3ac83511fbbc8174f790b0b64de1a47c756"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"4954fa5d6c21bc251b0d532428e382044d4a2cbb","unresolved":false,"context_lines":[{"line_number":2631,"context_line":"                    hide_snapdir, share_name, vserver_client)"},{"line_number":2632,"context_line":""},{"line_number":2633,"context_line":"    def get_share_status(self, share, share_server\u003dNone):"},{"line_number":2634,"context_line":"        if share[\u0027status\u0027] \u003d\u003d constants.STATUS_CREATING_FROM_SNAPSHOT:"},{"line_number":2635,"context_line":"            return self._update_create_from_snapshot_status(share,"},{"line_number":2636,"context_line":"                                                            share_server)"},{"line_number":2637,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"df33271e_230e5be4","line":2634,"range":{"start_line":2634,"start_character":8,"end_line":2634,"end_character":26},"in_reply_to":"df33271e_f58dc431","updated":"2020-04-01 23:33:18.000000000","message":"yes, the driver is still not prepared for any other status if the manager decides to send. Still logging just a warning and not moving to an error state. Just thinking on future new \u0027pending\u0027 states.","commit_id":"ac34f3ac83511fbbc8174f790b0b64de1a47c756"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"819c13bcbb0dc384ab19a5d060d5898624350752","unresolved":false,"context_lines":[{"line_number":492,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":493,"context_line":"                                   share_server\u003dNone, parent_share\u003dNone):"},{"line_number":494,"context_line":"        \"\"\"Creates new share from snapshot.\"\"\""},{"line_number":495,"context_line":"        # TODO(dviroel) return progress info in asynchronous answers"},{"line_number":496,"context_line":"        # NOTE(dviroel) if the parent_share is not provided, we\u0027ll assume that"},{"line_number":497,"context_line":"        # source and destination hosts are equal"},{"line_number":498,"context_line":"        if parent_share is None or parent_share[\u0027host\u0027] \u003d\u003d share[\u0027host\u0027]:"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_2c8896c4","line":495,"range":{"start_line":495,"start_character":5,"end_line":495,"end_character":68},"updated":"2020-04-07 15:57:43.000000000","message":"Aren\u0027t you just going to return 0% (and 100% for the synchronous case)  -- or is there more to do here that I\u0027m missing.","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"0de119852d1b3552565963cb5d587b00c587dabc","unresolved":false,"context_lines":[{"line_number":492,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":493,"context_line":"                                   share_server\u003dNone, parent_share\u003dNone):"},{"line_number":494,"context_line":"        \"\"\"Creates new share from snapshot.\"\"\""},{"line_number":495,"context_line":"        # TODO(dviroel) return progress info in asynchronous answers"},{"line_number":496,"context_line":"        # NOTE(dviroel) if the parent_share is not provided, we\u0027ll assume that"},{"line_number":497,"context_line":"        # source and destination hosts are equal"},{"line_number":498,"context_line":"        if parent_share is None or parent_share[\u0027host\u0027] \u003d\u003d share[\u0027host\u0027]:"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_8aff0166","line":495,"range":{"start_line":495,"start_character":5,"end_line":495,"end_character":68},"in_reply_to":"df33271e_2c8896c4","updated":"2020-04-07 17:37:12.000000000","message":"The share-manager already sets 100% for the synchronous case where the new share is active. I\u0027m not returning 0% since its not correspond to the current progress, instead  we prefer to left the field progress as None, and the user may know that the progress info are not being provided at all.","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"819c13bcbb0dc384ab19a5d060d5898624350752","unresolved":false,"context_lines":[{"line_number":511,"context_line":"                parent_share_server[key] \u003d ("},{"line_number":512,"context_line":"                    parent_share[\u0027share_server\u0027].get(key, None))"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"        # Store source share info into private storage since it\u0027s not visible"},{"line_number":515,"context_line":"        # by manila-share"},{"line_number":516,"context_line":"        src_share_instance \u003d {"},{"line_number":517,"context_line":"            \u0027id\u0027: share[\u0027id\u0027],"},{"line_number":518,"context_line":"            \u0027host\u0027: parent_share.get(\u0027host\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_cc376a4d","line":515,"range":{"start_line":514,"start_character":0,"end_line":515,"end_character":25},"updated":"2020-04-07 15:57:43.000000000","message":"This comment seems premature or at least worded \"funny\": it made me look for a save to private storage here but it\u0027s a lot further down.","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"0de119852d1b3552565963cb5d587b00c587dabc","unresolved":false,"context_lines":[{"line_number":511,"context_line":"                parent_share_server[key] \u003d ("},{"line_number":512,"context_line":"                    parent_share[\u0027share_server\u0027].get(key, None))"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"        # Store source share info into private storage since it\u0027s not visible"},{"line_number":515,"context_line":"        # by manila-share"},{"line_number":516,"context_line":"        src_share_instance \u003d {"},{"line_number":517,"context_line":"            \u0027id\u0027: share[\u0027id\u0027],"},{"line_number":518,"context_line":"            \u0027host\u0027: parent_share.get(\u0027host\u0027),"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_6a371d4f","line":515,"range":{"start_line":514,"start_character":0,"end_line":515,"end_character":25},"in_reply_to":"df33271e_cc376a4d","updated":"2020-04-07 17:37:12.000000000","message":"You are right Tom, the comment is suppose to explain that the dict below is to hold the info that will be stored in the private storage. Will fix this in the next PS.","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"819c13bcbb0dc384ab19a5d060d5898624350752","unresolved":false,"context_lines":[{"line_number":726,"context_line":"                    share_name, filesys_size_fixed\u003dFalse)"},{"line_number":727,"context_line":"                apply_qos_on_dest \u003d True"},{"line_number":728,"context_line":"                return_values[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"},{"line_number":729,"context_line":"        else:"},{"line_number":730,"context_line":"            LOG.warning(\"Caught an unexpected share creation state \u0027%s\u0027. \""},{"line_number":731,"context_line":"                        \"Skipping.\", current_state)"},{"line_number":732,"context_line":""},{"line_number":733,"context_line":"        if return_values[\u0027status\u0027] \u003d\u003d constants.STATUS_AVAILABLE:"},{"line_number":734,"context_line":"            if apply_qos_on_dest:"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_2769d1bd","line":731,"range":{"start_line":729,"start_character":8,"end_line":731,"end_character":51},"updated":"2020-04-07 15:57:43.000000000","message":"Are we sure it\u0027s OK just to log a warning and skip rather than raising an Exception?","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"0de119852d1b3552565963cb5d587b00c587dabc","unresolved":false,"context_lines":[{"line_number":726,"context_line":"                    share_name, filesys_size_fixed\u003dFalse)"},{"line_number":727,"context_line":"                apply_qos_on_dest \u003d True"},{"line_number":728,"context_line":"                return_values[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"},{"line_number":729,"context_line":"        else:"},{"line_number":730,"context_line":"            LOG.warning(\"Caught an unexpected share creation state \u0027%s\u0027. \""},{"line_number":731,"context_line":"                        \"Skipping.\", current_state)"},{"line_number":732,"context_line":""},{"line_number":733,"context_line":"        if return_values[\u0027status\u0027] \u003d\u003d constants.STATUS_AVAILABLE:"},{"line_number":734,"context_line":"            if apply_qos_on_dest:"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_aa82c5a3","line":731,"range":{"start_line":729,"start_character":8,"end_line":731,"end_character":51},"in_reply_to":"df33271e_2769d1bd","updated":"2020-04-07 17:37:12.000000000","message":"I can\u0027t think on a reason for not raising an exception here at this moment. I\u0027ll provide an update soon if nobody disagree. Thanks!","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a287e1ff1d0e446d77efb53989766ad43cfff3fd","unresolved":false,"context_lines":[{"line_number":493,"context_line":"                                   share_server\u003dNone, parent_share\u003dNone):"},{"line_number":494,"context_line":"        \"\"\"Creates new share from snapshot.\"\"\""},{"line_number":495,"context_line":"        # TODO(dviroel) return progress info in asynchronous answers"},{"line_number":496,"context_line":"        # NOTE(dviroel) if the parent_share is not provided, we\u0027ll assume that"},{"line_number":497,"context_line":"        # source and destination hosts are equal"},{"line_number":498,"context_line":"        if parent_share is None or parent_share[\u0027host\u0027] \u003d\u003d share[\u0027host\u0027]:"},{"line_number":499,"context_line":"            src_vserver, src_vserver_client \u003d self._get_vserver("},{"line_number":500,"context_line":"                share_server\u003dshare_server)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_331f1b09","line":497,"range":{"start_line":496,"start_character":0,"end_line":497,"end_character":48},"updated":"2020-04-09 08:04:37.000000000","message":"The parent share is always provided: https://review.opendev.org/#/c/709697/11/manila/share/manager.py@1765","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"16e7e67ddf484c665c73a46ae577c7df9e09caa9","unresolved":false,"context_lines":[{"line_number":493,"context_line":"                                   share_server\u003dNone, parent_share\u003dNone):"},{"line_number":494,"context_line":"        \"\"\"Creates new share from snapshot.\"\"\""},{"line_number":495,"context_line":"        # TODO(dviroel) return progress info in asynchronous answers"},{"line_number":496,"context_line":"        # NOTE(dviroel) if the parent_share is not provided, we\u0027ll assume that"},{"line_number":497,"context_line":"        # source and destination hosts are equal"},{"line_number":498,"context_line":"        if parent_share is None or parent_share[\u0027host\u0027] \u003d\u003d share[\u0027host\u0027]:"},{"line_number":499,"context_line":"            src_vserver, src_vserver_client \u003d self._get_vserver("},{"line_number":500,"context_line":"                share_server\u003dshare_server)"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_8bce9e57","line":497,"range":{"start_line":496,"start_character":0,"end_line":497,"end_character":48},"in_reply_to":"df33271e_331f1b09","updated":"2020-04-09 19:07:49.000000000","message":"Yes, removed.","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a287e1ff1d0e446d77efb53989766ad43cfff3fd","unresolved":false,"context_lines":[{"line_number":509,"context_line":"            ss_keys \u003d [\u0027id\u0027, \u0027identifier\u0027, \u0027backend_details\u0027, \u0027host\u0027]"},{"line_number":510,"context_line":"            for key in ss_keys:"},{"line_number":511,"context_line":"                parent_share_server[key] \u003d ("},{"line_number":512,"context_line":"                    parent_share[\u0027share_server\u0027].get(key, None))"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"        # Information to be saved in the private_storage that will need to be"},{"line_number":515,"context_line":"        # retrieved later, in order to continue with the share creation flow"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_d3d34f37","line":512,"range":{"start_line":512,"start_character":56,"end_line":512,"end_character":62},"updated":"2020-04-09 08:04:37.000000000","message":"nit: None is the default","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"16e7e67ddf484c665c73a46ae577c7df9e09caa9","unresolved":false,"context_lines":[{"line_number":509,"context_line":"            ss_keys \u003d [\u0027id\u0027, \u0027identifier\u0027, \u0027backend_details\u0027, \u0027host\u0027]"},{"line_number":510,"context_line":"            for key in ss_keys:"},{"line_number":511,"context_line":"                parent_share_server[key] \u003d ("},{"line_number":512,"context_line":"                    parent_share[\u0027share_server\u0027].get(key, None))"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"        # Information to be saved in the private_storage that will need to be"},{"line_number":515,"context_line":"        # retrieved later, in order to continue with the share creation flow"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_ebd76aed","line":512,"range":{"start_line":512,"start_character":56,"end_line":512,"end_character":62},"in_reply_to":"df33271e_d3d34f37","updated":"2020-04-09 19:07:49.000000000","message":"removed.","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a287e1ff1d0e446d77efb53989766ad43cfff3fd","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        }"},{"line_number":521,"context_line":"        # NOTE(dviroel): Data Motion functions access share\u0027s \u0027share_server\u0027"},{"line_number":522,"context_line":"        # attribute to get vserser information."},{"line_number":523,"context_line":"        dest_share \u003d copy.copy(share.to_dict())"},{"line_number":524,"context_line":"        dest_share[\u0027share_server\u0027] \u003d (share_server.to_dict()"},{"line_number":525,"context_line":"                                      if share_server else None)"},{"line_number":526,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_f3de533c","line":523,"range":{"start_line":523,"start_character":21,"end_line":523,"end_character":47},"updated":"2020-04-09 08:04:37.000000000","message":"This is a dict..","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"64e431e18de4ff17e0dba4115d6bc2f4b36f420d","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        }"},{"line_number":521,"context_line":"        # NOTE(dviroel): Data Motion functions access share\u0027s \u0027share_server\u0027"},{"line_number":522,"context_line":"        # attribute to get vserser information."},{"line_number":523,"context_line":"        dest_share \u003d copy.copy(share.to_dict())"},{"line_number":524,"context_line":"        dest_share[\u0027share_server\u0027] \u003d (share_server.to_dict()"},{"line_number":525,"context_line":"                                      if share_server else None)"},{"line_number":526,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_beeda2b8","line":523,"range":{"start_line":523,"start_character":21,"end_line":523,"end_character":47},"in_reply_to":"df33271e_2b631244","updated":"2020-04-09 19:52:35.000000000","message":"I see the problem now - currently, you\u0027re converting the parent share and its share server into a dictionary in the share manager, but, the actual/child share instance object and its own share server aren\u0027t being converted yet - I think this is something you can fix in a future patch in the share manager:\n\nhttps://review.opendev.org/#/c/709697/11/manila/share/manager.py@1768","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"96153ef4c522f3dc8f433f355e79ea10c806f1a9","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        }"},{"line_number":521,"context_line":"        # NOTE(dviroel): Data Motion functions access share\u0027s \u0027share_server\u0027"},{"line_number":522,"context_line":"        # attribute to get vserser information."},{"line_number":523,"context_line":"        dest_share \u003d copy.copy(share.to_dict())"},{"line_number":524,"context_line":"        dest_share[\u0027share_server\u0027] \u003d (share_server.to_dict()"},{"line_number":525,"context_line":"                                      if share_server else None)"},{"line_number":526,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_fef56a58","line":523,"range":{"start_line":523,"start_character":21,"end_line":523,"end_character":47},"in_reply_to":"df33271e_beeda2b8","updated":"2020-04-09 20:14:30.000000000","message":"Yes, but this looks like a endless conversion cause here have lots of backrefs associated to each entity. We can discuss later the best approach to solve this. Thanks.","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"16e7e67ddf484c665c73a46ae577c7df9e09caa9","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        }"},{"line_number":521,"context_line":"        # NOTE(dviroel): Data Motion functions access share\u0027s \u0027share_server\u0027"},{"line_number":522,"context_line":"        # attribute to get vserser information."},{"line_number":523,"context_line":"        dest_share \u003d copy.copy(share.to_dict())"},{"line_number":524,"context_line":"        dest_share[\u0027share_server\u0027] \u003d (share_server.to_dict()"},{"line_number":525,"context_line":"                                      if share_server else None)"},{"line_number":526,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_2b631244","line":523,"range":{"start_line":523,"start_character":21,"end_line":523,"end_character":47},"in_reply_to":"df33271e_f3de533c","updated":"2020-04-09 19:07:49.000000000","message":"This explanation will fit all \u0027to_dict()\u0027 calls.\nEven if we try do convert the share/share-server objects to a dict, we still face issues with sqlalchemy and \u0027detached session\u0027 errors. \nThis happens because share-manager \u0027to_dict\u0027 method aren\u0027t \n converting all nested sqlalchemy objects, and a copy or a dict updates leads us, somehow, to \u0027detached session\u0027 errors.\nSo calling a \u0027to_dict\u0027 here avoid these type of errors.","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7bf9102a714505966784d39bb1c27edfba0bc221","unresolved":false,"context_lines":[{"line_number":520,"context_line":"        }"},{"line_number":521,"context_line":"        # NOTE(dviroel): Data Motion functions access share\u0027s \u0027share_server\u0027"},{"line_number":522,"context_line":"        # attribute to get vserser information."},{"line_number":523,"context_line":"        dest_share \u003d copy.copy(share.to_dict())"},{"line_number":524,"context_line":"        dest_share[\u0027share_server\u0027] \u003d (share_server.to_dict()"},{"line_number":525,"context_line":"                                      if share_server else None)"},{"line_number":526,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_1ca2d6ae","line":523,"range":{"start_line":523,"start_character":21,"end_line":523,"end_character":47},"in_reply_to":"df33271e_fef56a58","updated":"2020-04-09 21:21:43.000000000","message":"+1","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a287e1ff1d0e446d77efb53989766ad43cfff3fd","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        # NOTE(dviroel): Data Motion functions access share\u0027s \u0027share_server\u0027"},{"line_number":522,"context_line":"        # attribute to get vserser information."},{"line_number":523,"context_line":"        dest_share \u003d copy.copy(share.to_dict())"},{"line_number":524,"context_line":"        dest_share[\u0027share_server\u0027] \u003d (share_server.to_dict()"},{"line_number":525,"context_line":"                                      if share_server else None)"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"        dm_session \u003d data_motion.DataMotionSession()"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_53e73f13","line":524,"range":{"start_line":524,"start_character":38,"end_line":524,"end_character":60},"updated":"2020-04-09 08:04:37.000000000","message":"same","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"16e7e67ddf484c665c73a46ae577c7df9e09caa9","unresolved":false,"context_lines":[{"line_number":521,"context_line":"        # NOTE(dviroel): Data Motion functions access share\u0027s \u0027share_server\u0027"},{"line_number":522,"context_line":"        # attribute to get vserser information."},{"line_number":523,"context_line":"        dest_share \u003d copy.copy(share.to_dict())"},{"line_number":524,"context_line":"        dest_share[\u0027share_server\u0027] \u003d (share_server.to_dict()"},{"line_number":525,"context_line":"                                      if share_server else None)"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"        dm_session \u003d data_motion.DataMotionSession()"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_ab56025b","line":524,"range":{"start_line":524,"start_character":38,"end_line":524,"end_character":60},"in_reply_to":"df33271e_53e73f13","updated":"2020-04-09 19:07:49.000000000","message":"same as L523.","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a287e1ff1d0e446d77efb53989766ad43cfff3fd","unresolved":false,"context_lines":[{"line_number":2386,"context_line":"                self._move_volume(source_share, destination_share,"},{"line_number":2387,"context_line":"                                  share_server, cutover_action)"},{"line_number":2388,"context_line":"            except netapp_api.NaApiError as e:"},{"line_number":2389,"context_line":"                if e.code !\u003d netapp_api.EAPIERROR:"},{"line_number":2390,"context_line":"                    raise"},{"line_number":2391,"context_line":"                else:"},{"line_number":2392,"context_line":"                    msg_args \u003d {\u0027id\u0027: source_share[\u0027id\u0027]}"},{"line_number":2393,"context_line":"                    msg \u003d _(\u0027The volume %(id)s is undergoing a clone split \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_b30a0bcf","line":2390,"range":{"start_line":2389,"start_character":16,"end_line":2390,"end_character":25},"updated":"2020-04-09 08:04:37.000000000","message":"Not all EAPIERRORS mean that the volume is undergoing a clone split - unfortunately 13001/EAPIERROR is a generic error, and sadly, you\u0027ll have to look into the message for keywords, perhaps like this:\n\n https://opendev.org/openstack/manila/src/commit/0c6b39d9a207de9be742f95dfe598b28396bffbe/manila/share/drivers/netapp/dataontap/client/client_cmode.py#L2355-L2356","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"16e7e67ddf484c665c73a46ae577c7df9e09caa9","unresolved":false,"context_lines":[{"line_number":2386,"context_line":"                self._move_volume(source_share, destination_share,"},{"line_number":2387,"context_line":"                                  share_server, cutover_action)"},{"line_number":2388,"context_line":"            except netapp_api.NaApiError as e:"},{"line_number":2389,"context_line":"                if e.code !\u003d netapp_api.EAPIERROR:"},{"line_number":2390,"context_line":"                    raise"},{"line_number":2391,"context_line":"                else:"},{"line_number":2392,"context_line":"                    msg_args \u003d {\u0027id\u0027: source_share[\u0027id\u0027]}"},{"line_number":2393,"context_line":"                    msg \u003d _(\u0027The volume %(id)s is undergoing a clone split \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_eb4c8ac9","line":2390,"range":{"start_line":2389,"start_character":16,"end_line":2390,"end_character":25},"in_reply_to":"df33271e_b30a0bcf","updated":"2020-04-09 19:07:49.000000000","message":"Much better! Thanks for sharing.","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"64e431e18de4ff17e0dba4115d6bc2f4b36f420d","unresolved":false,"context_lines":[{"line_number":2393,"context_line":"                    LOG.warning(msg)"},{"line_number":2394,"context_line":"                    raise exception.ShareBusyException(reason\u003dmsg)"},{"line_number":2395,"context_line":"                else:"},{"line_number":2396,"context_line":"                    raise"},{"line_number":2397,"context_line":"        try:"},{"line_number":2398,"context_line":"            try_move_volume()"},{"line_number":2399,"context_line":"        except exception.ShareBusyException:"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_dec22634","line":2396,"range":{"start_line":2396,"start_character":20,"end_line":2396,"end_character":25},"updated":"2020-04-09 19:52:35.000000000","message":"raise ShareBackendException?","commit_id":"b4c66338f22f249e3a9791f13837cf18dd38dba6"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"96153ef4c522f3dc8f433f355e79ea10c806f1a9","unresolved":false,"context_lines":[{"line_number":2393,"context_line":"                    LOG.warning(msg)"},{"line_number":2394,"context_line":"                    raise exception.ShareBusyException(reason\u003dmsg)"},{"line_number":2395,"context_line":"                else:"},{"line_number":2396,"context_line":"                    raise"},{"line_number":2397,"context_line":"        try:"},{"line_number":2398,"context_line":"            try_move_volume()"},{"line_number":2399,"context_line":"        except exception.ShareBusyException:"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_5e9c560d","line":2396,"range":{"start_line":2396,"start_character":20,"end_line":2396,"end_character":25},"in_reply_to":"df33271e_dec22634","updated":"2020-04-09 20:14:30.000000000","message":"yeah, even been a private method, this should be converted here. Thanks.","commit_id":"b4c66338f22f249e3a9791f13837cf18dd38dba6"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"761d7ec766c015e85e8cc9bf5cda37528bee3473","unresolved":false,"context_lines":[{"line_number":2342,"context_line":""},{"line_number":2343,"context_line":"        return compatibility"},{"line_number":2344,"context_line":""},{"line_number":2345,"context_line":"    def _move_volume_after_splitting(self, source_share, destination_share,"},{"line_number":2346,"context_line":"                                     share_server\u003dNone, cutover_action\u003d\u0027wait\u0027):"},{"line_number":2347,"context_line":"        retries \u003d (self.configuration.netapp_start_volume_move_timeout / 5"},{"line_number":2348,"context_line":"                   or 1)"}],"source_content_type":"text/x-python","patch_set":8,"id":"df33271e_7c3cc22e","line":2345,"range":{"start_line":2345,"start_character":4,"end_line":2345,"end_character":75},"updated":"2020-04-09 21:32:42.000000000","message":"Don\u0027t know how this was moved to here, must be something with IDE shortcuts.","commit_id":"63867a3ba9de3f5411420d47c7bf474419b3fcca"}],"manila/share/drivers/netapp/dataontap/cluster_mode/lib_multi_svm.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"819c13bcbb0dc384ab19a5d060d5898624350752","unresolved":false,"context_lines":[{"line_number":558,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":559,"context_line":"                                   share_server\u003dNone, parent_share\u003dNone):"},{"line_number":560,"context_line":"        # If parent_share is not provided we\u0027ll consider that both source and"},{"line_number":561,"context_line":"        # destination resides within the same cluster and vserver."},{"line_number":562,"context_line":"        if parent_share is not None and parent_share[\u0027host\u0027] !\u003d share[\u0027host\u0027]:"},{"line_number":563,"context_line":"            # 1. Retrieve source and destination vservers from source and"},{"line_number":564,"context_line":"            # destination shares"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_3b1612f3","line":561,"range":{"start_line":561,"start_character":22,"end_line":561,"end_character":29},"updated":"2020-04-07 15:57:43.000000000","message":"nit: reside","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"1b96422a209b212a72a6f072c365d415b35eaf89","unresolved":false,"context_lines":[{"line_number":558,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":559,"context_line":"                                   share_server\u003dNone, parent_share\u003dNone):"},{"line_number":560,"context_line":"        # If parent_share is not provided we\u0027ll consider that both source and"},{"line_number":561,"context_line":"        # destination resides within the same cluster and vserver."},{"line_number":562,"context_line":"        if parent_share is not None and parent_share[\u0027host\u0027] !\u003d share[\u0027host\u0027]:"},{"line_number":563,"context_line":"            # 1. Retrieve source and destination vservers from source and"},{"line_number":564,"context_line":"            # destination shares"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_ba7b008a","line":561,"range":{"start_line":561,"start_character":22,"end_line":561,"end_character":29},"in_reply_to":"df33271e_3b1612f3","updated":"2020-04-09 03:37:45.000000000","message":"Done","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"819c13bcbb0dc384ab19a5d060d5898624350752","unresolved":false,"context_lines":[{"line_number":563,"context_line":"            # 1. Retrieve source and destination vservers from source and"},{"line_number":564,"context_line":"            # destination shares"},{"line_number":565,"context_line":"            new_share \u003d copy.copy(share.to_dict())"},{"line_number":566,"context_line":"            new_share[\u0027share_server\u0027] \u003d share_server.to_dict()"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"            dm_session \u003d data_motion.DataMotionSession()"},{"line_number":569,"context_line":"            src_vserver \u003d dm_session.get_vserver_from_share(parent_share)"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_bbba226b","line":566,"range":{"start_line":566,"start_character":40,"end_line":566,"end_character":62},"updated":"2020-04-07 15:57:43.000000000","message":"What happens if share_server is None?","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"0de119852d1b3552565963cb5d587b00c587dabc","unresolved":false,"context_lines":[{"line_number":563,"context_line":"            # 1. Retrieve source and destination vservers from source and"},{"line_number":564,"context_line":"            # destination shares"},{"line_number":565,"context_line":"            new_share \u003d copy.copy(share.to_dict())"},{"line_number":566,"context_line":"            new_share[\u0027share_server\u0027] \u003d share_server.to_dict()"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"            dm_session \u003d data_motion.DataMotionSession()"},{"line_number":569,"context_line":"            src_vserver \u003d dm_session.get_vserver_from_share(parent_share)"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_0a2e51a4","line":566,"range":{"start_line":566,"start_character":40,"end_line":566,"end_character":62},"in_reply_to":"df33271e_bbba226b","updated":"2020-04-07 17:37:12.000000000","message":"Will raise an AttributeError and fail.\nSince that lib_multi_svm is only called in DHSS\u003d\u003dTrue mode, the share-manager will guarantee that a share_server will for this driver call. Let me know if you think that we still need to raise a different error for a share_server \u003d\u003d None.","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"819c13bcbb0dc384ab19a5d060d5898624350752","unresolved":false,"context_lines":[{"line_number":589,"context_line":"                if not self._get_vserver_peers(dest_vserver, src_vserver):"},{"line_number":590,"context_line":"                    # 3.1. Request vserver peer creation from new_replica\u0027s"},{"line_number":591,"context_line":"                    # host to active replica\u0027s host"},{"line_number":592,"context_line":"                    dest_share_client.create_vserver_peer("},{"line_number":593,"context_line":"                        dest_vserver, src_vserver,"},{"line_number":594,"context_line":"                        peer_cluster_name\u003dsrc_share_cluster_name)"},{"line_number":595,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_36974993","line":592,"range":{"start_line":592,"start_character":20,"end_line":592,"end_character":57},"updated":"2020-04-07 15:57:43.000000000","message":"Can this call ever fail?","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"0de119852d1b3552565963cb5d587b00c587dabc","unresolved":false,"context_lines":[{"line_number":589,"context_line":"                if not self._get_vserver_peers(dest_vserver, src_vserver):"},{"line_number":590,"context_line":"                    # 3.1. Request vserver peer creation from new_replica\u0027s"},{"line_number":591,"context_line":"                    # host to active replica\u0027s host"},{"line_number":592,"context_line":"                    dest_share_client.create_vserver_peer("},{"line_number":593,"context_line":"                        dest_vserver, src_vserver,"},{"line_number":594,"context_line":"                        peer_cluster_name\u003dsrc_share_cluster_name)"},{"line_number":595,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_4dfeb305","line":592,"range":{"start_line":592,"start_character":20,"end_line":592,"end_character":57},"in_reply_to":"df33271e_36974993","updated":"2020-04-07 17:37:12.000000000","message":"Yes, can fail if the operator don\u0027t provide peering between different clusters. If it fails here, will fail the creation process. Didn\u0027t see any other operations above that need to rollback in this scenario. I\u0027m OK with this failing and providing the vserver peer error message. What do you think?","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"819c13bcbb0dc384ab19a5d060d5898624350752","unresolved":false,"context_lines":[{"line_number":595,"context_line":""},{"line_number":596,"context_line":"                    # 3.2. Accepts the vserver peering using active replica"},{"line_number":597,"context_line":"                    # host\u0027s client"},{"line_number":598,"context_line":"                    src_share_client.accept_vserver_peer(src_vserver,"},{"line_number":599,"context_line":"                                                         dest_vserver)"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"        return (super(NetAppCmodeMultiSVMFileStorageLibrary, self)"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_7691d199","line":598,"range":{"start_line":598,"start_character":20,"end_line":598,"end_character":58},"updated":"2020-04-07 15:57:43.000000000","message":"Or this one?","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"0de119852d1b3552565963cb5d587b00c587dabc","unresolved":false,"context_lines":[{"line_number":595,"context_line":""},{"line_number":596,"context_line":"                    # 3.2. Accepts the vserver peering using active replica"},{"line_number":597,"context_line":"                    # host\u0027s client"},{"line_number":598,"context_line":"                    src_share_client.accept_vserver_peer(src_vserver,"},{"line_number":599,"context_line":"                                                         dest_vserver)"},{"line_number":600,"context_line":""},{"line_number":601,"context_line":"        return (super(NetAppCmodeMultiSVMFileStorageLibrary, self)"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_ad35bfdd","line":598,"range":{"start_line":598,"start_character":20,"end_line":598,"end_character":58},"in_reply_to":"df33271e_7691d199","updated":"2020-04-07 17:37:12.000000000","message":"Can fail for the same reasons pointed in the call above. If the admin does not provide a peered cluster, the call above will fail first and this one won\u0027t be called.","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a287e1ff1d0e446d77efb53989766ad43cfff3fd","unresolved":false,"context_lines":[{"line_number":557,"context_line":""},{"line_number":558,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":559,"context_line":"                                   share_server\u003dNone, parent_share\u003dNone):"},{"line_number":560,"context_line":"        # If parent_share is not provided we\u0027ll consider that both source and"},{"line_number":561,"context_line":"        # destination reside within the same cluster and vserver."},{"line_number":562,"context_line":"        if parent_share is not None and parent_share[\u0027host\u0027] !\u003d share[\u0027host\u0027]:"},{"line_number":563,"context_line":"            # 1. Retrieve source and destination vservers from source and"},{"line_number":564,"context_line":"            # destination shares"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_d39b4fc6","line":561,"range":{"start_line":560,"start_character":8,"end_line":561,"end_character":65},"updated":"2020-04-09 08:04:37.000000000","message":"parent share is always provided per https://review.opendev.org/#/c/709697/11/manila/share/manager.py@1765\n\nSo this condition is always true..","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"16e7e67ddf484c665c73a46ae577c7df9e09caa9","unresolved":false,"context_lines":[{"line_number":557,"context_line":""},{"line_number":558,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":559,"context_line":"                                   share_server\u003dNone, parent_share\u003dNone):"},{"line_number":560,"context_line":"        # If parent_share is not provided we\u0027ll consider that both source and"},{"line_number":561,"context_line":"        # destination reside within the same cluster and vserver."},{"line_number":562,"context_line":"        if parent_share is not None and parent_share[\u0027host\u0027] !\u003d share[\u0027host\u0027]:"},{"line_number":563,"context_line":"            # 1. Retrieve source and destination vservers from source and"},{"line_number":564,"context_line":"            # destination shares"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_cb49c6b7","line":561,"range":{"start_line":560,"start_character":8,"end_line":561,"end_character":65},"in_reply_to":"df33271e_d39b4fc6","updated":"2020-04-09 19:07:49.000000000","message":"True! Done!","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a287e1ff1d0e446d77efb53989766ad43cfff3fd","unresolved":false,"context_lines":[{"line_number":562,"context_line":"        if parent_share is not None and parent_share[\u0027host\u0027] !\u003d share[\u0027host\u0027]:"},{"line_number":563,"context_line":"            # 1. Retrieve source and destination vservers from source and"},{"line_number":564,"context_line":"            # destination shares"},{"line_number":565,"context_line":"            new_share \u003d copy.copy(share.to_dict())"},{"line_number":566,"context_line":"            new_share[\u0027share_server\u0027] \u003d share_server.to_dict()"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"            dm_session \u003d data_motion.DataMotionSession()"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_93b54735","line":565,"range":{"start_line":565,"start_character":29,"end_line":565,"end_character":33},"updated":"2020-04-09 08:04:37.000000000","message":"deep copy?","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a287e1ff1d0e446d77efb53989766ad43cfff3fd","unresolved":false,"context_lines":[{"line_number":562,"context_line":"        if parent_share is not None and parent_share[\u0027host\u0027] !\u003d share[\u0027host\u0027]:"},{"line_number":563,"context_line":"            # 1. Retrieve source and destination vservers from source and"},{"line_number":564,"context_line":"            # destination shares"},{"line_number":565,"context_line":"            new_share \u003d copy.copy(share.to_dict())"},{"line_number":566,"context_line":"            new_share[\u0027share_server\u0027] \u003d share_server.to_dict()"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"            dm_session \u003d data_motion.DataMotionSession()"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_33955b88","line":565,"range":{"start_line":565,"start_character":40,"end_line":565,"end_character":49},"updated":"2020-04-09 08:04:37.000000000","message":"this is already performed by the share manager, why do it again?","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"16e7e67ddf484c665c73a46ae577c7df9e09caa9","unresolved":false,"context_lines":[{"line_number":562,"context_line":"        if parent_share is not None and parent_share[\u0027host\u0027] !\u003d share[\u0027host\u0027]:"},{"line_number":563,"context_line":"            # 1. Retrieve source and destination vservers from source and"},{"line_number":564,"context_line":"            # destination shares"},{"line_number":565,"context_line":"            new_share \u003d copy.copy(share.to_dict())"},{"line_number":566,"context_line":"            new_share[\u0027share_server\u0027] \u003d share_server.to_dict()"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"            dm_session \u003d data_motion.DataMotionSession()"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_0bcd6e30","line":565,"range":{"start_line":565,"start_character":40,"end_line":565,"end_character":49},"in_reply_to":"df33271e_33955b88","updated":"2020-04-09 19:07:49.000000000","message":"same as [1]\n\n[1] https://review.opendev.org/#/c/712642/6/manila/share/drivers/netapp/dataontap/cluster_mode/lib_base.py@523","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"16e7e67ddf484c665c73a46ae577c7df9e09caa9","unresolved":false,"context_lines":[{"line_number":562,"context_line":"        if parent_share is not None and parent_share[\u0027host\u0027] !\u003d share[\u0027host\u0027]:"},{"line_number":563,"context_line":"            # 1. Retrieve source and destination vservers from source and"},{"line_number":564,"context_line":"            # destination shares"},{"line_number":565,"context_line":"            new_share \u003d copy.copy(share.to_dict())"},{"line_number":566,"context_line":"            new_share[\u0027share_server\u0027] \u003d share_server.to_dict()"},{"line_number":567,"context_line":""},{"line_number":568,"context_line":"            dm_session \u003d data_motion.DataMotionSession()"}],"source_content_type":"text/x-python","patch_set":6,"id":"df33271e_8bd85eef","line":565,"range":{"start_line":565,"start_character":29,"end_line":565,"end_character":33},"in_reply_to":"df33271e_93b54735","updated":"2020-04-09 19:07:49.000000000","message":"yeah, after converting to dict again, we shouldn\u0027t have problems using deep copy.","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"64e431e18de4ff17e0dba4115d6bc2f4b36f420d","unresolved":false,"context_lines":[{"line_number":557,"context_line":""},{"line_number":558,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":559,"context_line":"                                   share_server\u003dNone, parent_share\u003dNone):"},{"line_number":560,"context_line":"        if parent_share[\u0027host\u0027] !\u003d share[\u0027host\u0027]:"},{"line_number":561,"context_line":"            # 1. Retrieve source and destination vservers from source and"},{"line_number":562,"context_line":"            # destination shares"},{"line_number":563,"context_line":"            new_share \u003d copy.deepcopy(share.to_dict())"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_9e289ee2","line":560,"range":{"start_line":560,"start_character":11,"end_line":560,"end_character":48},"updated":"2020-04-09 19:52:35.000000000","message":"what you really want to check here is if parent and child are in different vservers in different clusters, this check won\u0027t do that...","commit_id":"b4c66338f22f249e3a9791f13837cf18dd38dba6"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"96153ef4c522f3dc8f433f355e79ea10c806f1a9","unresolved":false,"context_lines":[{"line_number":557,"context_line":""},{"line_number":558,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":559,"context_line":"                                   share_server\u003dNone, parent_share\u003dNone):"},{"line_number":560,"context_line":"        if parent_share[\u0027host\u0027] !\u003d share[\u0027host\u0027]:"},{"line_number":561,"context_line":"            # 1. Retrieve source and destination vservers from source and"},{"line_number":562,"context_line":"            # destination shares"},{"line_number":563,"context_line":"            new_share \u003d copy.deepcopy(share.to_dict())"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_a113c35b","line":560,"range":{"start_line":560,"start_character":11,"end_line":560,"end_character":48},"in_reply_to":"df33271e_9e289ee2","updated":"2020-04-09 20:14:30.000000000","message":"Correct. By adding this I just made a shortcut to avoid all the process below. If parent and child are in the same backend and pool, they must be in the same cluster right? When creating share-from-snapshot we only need to create a peering for inter-cluster operations, since intra-cluster will not use snapmirror. This was my initial idea since host info is easy to retrieve. A note could clarify this for who\u0027s reading the code. Or just remove the if-clause.","commit_id":"b4c66338f22f249e3a9791f13837cf18dd38dba6"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7bf9102a714505966784d39bb1c27edfba0bc221","unresolved":false,"context_lines":[{"line_number":557,"context_line":""},{"line_number":558,"context_line":"    def create_share_from_snapshot(self, context, share, snapshot,"},{"line_number":559,"context_line":"                                   share_server\u003dNone, parent_share\u003dNone):"},{"line_number":560,"context_line":"        if parent_share[\u0027host\u0027] !\u003d share[\u0027host\u0027]:"},{"line_number":561,"context_line":"            # 1. Retrieve source and destination vservers from source and"},{"line_number":562,"context_line":"            # destination shares"},{"line_number":563,"context_line":"            new_share \u003d copy.deepcopy(share.to_dict())"}],"source_content_type":"text/x-python","patch_set":7,"id":"df33271e_dc74ee38","line":560,"range":{"start_line":560,"start_character":11,"end_line":560,"end_character":48},"in_reply_to":"df33271e_a113c35b","updated":"2020-04-09 21:21:43.000000000","message":"I see, yeah, makes sense..","commit_id":"b4c66338f22f249e3a9791f13837cf18dd38dba6"}],"manila/share/drivers/netapp/options.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"819c13bcbb0dc384ab19a5d060d5898624350752","unresolved":false,"context_lines":[{"line_number":155,"context_line":"               min\u003d0,"},{"line_number":156,"context_line":"               default\u003d3600,  # One Hour,"},{"line_number":157,"context_line":"               help\u003d\u0027The maximum time in seconds to wait for the completion \u0027"},{"line_number":158,"context_line":"                    \u0027of a volume split operation in order to start a volume\u0027"},{"line_number":159,"context_line":"                    \u0027move.\u0027), ]"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_989ac4c2","line":158,"range":{"start_line":158,"start_character":69,"end_line":158,"end_character":76},"updated":"2020-04-07 15:57:43.000000000","message":"add space after ``volume``","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"819c13bcbb0dc384ab19a5d060d5898624350752","unresolved":false,"context_lines":[{"line_number":155,"context_line":"               min\u003d0,"},{"line_number":156,"context_line":"               default\u003d3600,  # One Hour,"},{"line_number":157,"context_line":"               help\u003d\u0027The maximum time in seconds to wait for the completion \u0027"},{"line_number":158,"context_line":"                    \u0027of a volume split operation in order to start a volume\u0027"},{"line_number":159,"context_line":"                    \u0027move.\u0027), ]"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_983644b4","line":158,"range":{"start_line":158,"start_character":26,"end_line":158,"end_character":49},"updated":"2020-04-07 15:57:43.000000000","message":"volume clone split operation?","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"1b96422a209b212a72a6f072c365d415b35eaf89","unresolved":false,"context_lines":[{"line_number":155,"context_line":"               min\u003d0,"},{"line_number":156,"context_line":"               default\u003d3600,  # One Hour,"},{"line_number":157,"context_line":"               help\u003d\u0027The maximum time in seconds to wait for the completion \u0027"},{"line_number":158,"context_line":"                    \u0027of a volume split operation in order to start a volume\u0027"},{"line_number":159,"context_line":"                    \u0027move.\u0027), ]"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_1a6dcccb","line":158,"range":{"start_line":158,"start_character":26,"end_line":158,"end_character":49},"in_reply_to":"df33271e_983644b4","updated":"2020-04-09 03:37:45.000000000","message":"Done","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"1b96422a209b212a72a6f072c365d415b35eaf89","unresolved":false,"context_lines":[{"line_number":155,"context_line":"               min\u003d0,"},{"line_number":156,"context_line":"               default\u003d3600,  # One Hour,"},{"line_number":157,"context_line":"               help\u003d\u0027The maximum time in seconds to wait for the completion \u0027"},{"line_number":158,"context_line":"                    \u0027of a volume split operation in order to start a volume\u0027"},{"line_number":159,"context_line":"                    \u0027move.\u0027), ]"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":5,"id":"df33271e_fa7108aa","line":158,"range":{"start_line":158,"start_character":69,"end_line":158,"end_character":76},"in_reply_to":"df33271e_989ac4c2","updated":"2020-04-09 03:37:45.000000000","message":"Done","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"}],"releasenotes/notes/netapp-create-share-from-snapshot-another-pool-330639b57aa5f04d.yaml":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"819c13bcbb0dc384ab19a5d060d5898624350752","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The NetApp driver now supports new shares from snapshots to be efficiently"},{"line_number":5,"context_line":"    created in pools or back ends different than the source share\u0027s ones. In"},{"line_number":6,"context_line":"    order to have this functionality working across different back ends,"},{"line_number":7,"context_line":"    replication must be enabled and configured accordingly."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"df33271e_b8598836","line":5,"range":{"start_line":4,"start_character":4,"end_line":5,"end_character":72},"updated":"2020-04-07 15:57:43.000000000","message":"Suggest:\n   The NetApp driver now supports efficiently creating new shares from snaphots in pools or on back ends different from those for the original source share.","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"a9661b30badc7ae2536dbd398d8a28f8ae3cb3b3","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The NetApp driver now supports new shares from snapshots to be efficiently"},{"line_number":5,"context_line":"    created in pools or back ends different than the source share\u0027s ones. In"},{"line_number":6,"context_line":"    order to have this functionality working across different back ends,"},{"line_number":7,"context_line":"    replication must be enabled and configured accordingly."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"df33271e_3a5bc32e","line":5,"range":{"start_line":5,"start_character":68,"end_line":5,"end_character":72},"updated":"2020-04-06 18:00:11.000000000","message":"nit: one","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"1b96422a209b212a72a6f072c365d415b35eaf89","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The NetApp driver now supports new shares from snapshots to be efficiently"},{"line_number":5,"context_line":"    created in pools or back ends different than the source share\u0027s ones. In"},{"line_number":6,"context_line":"    order to have this functionality working across different back ends,"},{"line_number":7,"context_line":"    replication must be enabled and configured accordingly."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"df33271e_9a471c4d","line":5,"range":{"start_line":5,"start_character":68,"end_line":5,"end_character":72},"in_reply_to":"df33271e_3a5bc32e","updated":"2020-04-09 03:37:45.000000000","message":"Done","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":30002,"name":"Douglas Viroel","email":"viroel@gmail.com","username":"dviroel"},"change_message_id":"1b96422a209b212a72a6f072c365d415b35eaf89","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The NetApp driver now supports new shares from snapshots to be efficiently"},{"line_number":5,"context_line":"    created in pools or back ends different than the source share\u0027s ones. In"},{"line_number":6,"context_line":"    order to have this functionality working across different back ends,"},{"line_number":7,"context_line":"    replication must be enabled and configured accordingly."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"df33271e_7a44d847","line":5,"range":{"start_line":4,"start_character":4,"end_line":5,"end_character":72},"in_reply_to":"df33271e_b8598836","updated":"2020-04-09 03:37:45.000000000","message":"Done","commit_id":"f1d8820b7a8b1369e9853bc57dd56c7db32e9d9a"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"a287e1ff1d0e446d77efb53989766ad43cfff3fd","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    The NetApp driver now supports efficiently creating new shares from"},{"line_number":5,"context_line":"    snapshots in pools or back ends different than the source share\u0027s one. In"},{"line_number":6,"context_line":"    order to have this functionality working across different back ends,"},{"line_number":7,"context_line":"    replication must be enabled and configured accordingly."}],"source_content_type":"text/x-yaml","patch_set":6,"id":"df33271e_3310bb4e","line":5,"range":{"start_line":5,"start_character":51,"end_line":5,"end_character":73},"updated":"2020-04-09 08:04:37.000000000","message":"nit: that of the source share","commit_id":"45e756bcb18f3259dec9b52496a3e68c2c908d9d"}]}
