)]}'
{"manila/api/openstack/api_version_request.py":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c261f2731aa3b10d53602ffeb3f38ef319598774","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            \u0027force_host_copy\u0027 to \u0027force_host_assisted_migration\u0027, removed"},{"line_number":79,"context_line":"            \u0027notify\u0027 parameter and removed previous migrate_share API support."},{"line_number":80,"context_line":"            Updated reset_task_state API to accept \u0027None\u0027 value."},{"line_number":81,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD"},{"line_number":82,"context_line":"    * 2.23 - Added share_type to filter results of scheduler-stats/pools API."},{"line_number":83,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":84,"context_line":"    * 2.24 - Updated migration_start API adding mandatory parameter"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_86cf3c7e","line":81,"updated":"2016-12-21 03:44:55.000000000","message":"Rebase problem?  I wonder why this is not caught by Jenkins.","commit_id":"ce065eff7b97cf2b8d2eca618a257924ec35d273"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"b9cff5a5b7f5dd9ea6485a43f1ec6de754e04330","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            \u0027force_host_copy\u0027 to \u0027force_host_assisted_migration\u0027, removed"},{"line_number":79,"context_line":"            \u0027notify\u0027 parameter and removed previous migrate_share API support."},{"line_number":80,"context_line":"            Updated reset_task_state API to accept \u0027None\u0027 value."},{"line_number":81,"context_line":"\u003c\u003c\u003c\u003c\u003c\u003c\u003c HEAD"},{"line_number":82,"context_line":"    * 2.23 - Added share_type to filter results of scheduler-stats/pools API."},{"line_number":83,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":84,"context_line":"    * 2.24 - Updated migration_start API adding mandatory parameter"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa48f94a_f80d6938","line":81,"in_reply_to":"1a6eadb0_86cf3c7e","updated":"2016-12-21 18:01:49.000000000","message":"Done","commit_id":"ce065eff7b97cf2b8d2eca618a257924ec35d273"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"c261f2731aa3b10d53602ffeb3f38ef319598774","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    * 2.24 - Updated migration_start API adding mandatory parameter"},{"line_number":85,"context_line":"             \u0027preserve_snapshots\u0027 and changed \u0027preserve_metadata\u0027, \u0027writable\u0027,"},{"line_number":86,"context_line":"             \u0027nondisruptive\u0027 to be mandatory as well."},{"line_number":87,"context_line":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e 2d04232... Share Migration Ocata Improvements"},{"line_number":88,"context_line":"\"\"\""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a6eadb0_66df803a","line":87,"updated":"2016-12-21 03:44:55.000000000","message":"Here too.","commit_id":"ce065eff7b97cf2b8d2eca618a257924ec35d273"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"b9cff5a5b7f5dd9ea6485a43f1ec6de754e04330","unresolved":false,"context_lines":[{"line_number":84,"context_line":"    * 2.24 - Updated migration_start API adding mandatory parameter"},{"line_number":85,"context_line":"             \u0027preserve_snapshots\u0027 and changed \u0027preserve_metadata\u0027, \u0027writable\u0027,"},{"line_number":86,"context_line":"             \u0027nondisruptive\u0027 to be mandatory as well."},{"line_number":87,"context_line":"\u003e\u003e\u003e\u003e\u003e\u003e\u003e 2d04232... Share Migration Ocata Improvements"},{"line_number":88,"context_line":"\"\"\""},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa48f94a_18130d5e","line":87,"in_reply_to":"1a6eadb0_66df803a","updated":"2016-12-21 18:01:49.000000000","message":"Done","commit_id":"ce065eff7b97cf2b8d2eca618a257924ec35d273"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":84,"context_line":"             spec. Also made the \u0027snapshot_support\u0027 extra spec optional."},{"line_number":85,"context_line":"    * 2.25 - Added quota-show detail API."},{"line_number":86,"context_line":"    * 2.26 - Removed \u0027nova_net_id\u0027 parameter from share_network API."},{"line_number":87,"context_line":"    * 2.27 - Updated migration_start API adding mandatory parameter"},{"line_number":88,"context_line":"             \u0027preserve_snapshots\u0027 and changed \u0027preserve_metadata\u0027, \u0027writable\u0027,"},{"line_number":89,"context_line":"             \u0027nondisruptive\u0027 to be mandatory as well."},{"line_number":90,"context_line":"\"\"\""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_7283de04","line":89,"range":{"start_line":87,"start_character":13,"end_line":89,"end_character":53},"updated":"2017-01-16 16:45:05.000000000","message":"mention that migration_start API is unsupported prior to this microversion..","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":84,"context_line":"             spec. Also made the \u0027snapshot_support\u0027 extra spec optional."},{"line_number":85,"context_line":"    * 2.25 - Added quota-show detail API."},{"line_number":86,"context_line":"    * 2.26 - Removed \u0027nova_net_id\u0027 parameter from share_network API."},{"line_number":87,"context_line":"    * 2.27 - Updated migration_start API adding mandatory parameter"},{"line_number":88,"context_line":"             \u0027preserve_snapshots\u0027 and changed \u0027preserve_metadata\u0027, \u0027writable\u0027,"},{"line_number":89,"context_line":"             \u0027nondisruptive\u0027 to be mandatory as well."},{"line_number":90,"context_line":"\"\"\""},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_35993d20","line":89,"range":{"start_line":87,"start_character":13,"end_line":89,"end_character":53},"in_reply_to":"7a3c09a3_7283de04","updated":"2017-01-16 17:55:37.000000000","message":"Done","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"}],"manila/api/openstack/rest_api_version_history.rst":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":161,"context_line":"----"},{"line_number":162,"context_line":"  Updated migration_start API adding mandatory parameter \u0027preserve_snapshots\u0027"},{"line_number":163,"context_line":"  and changed \u0027preserve_metadata\u0027, \u0027writable\u0027, \u0027nondisruptive\u0027 to be mandatory"},{"line_number":164,"context_line":"  as well."}],"source_content_type":"text/x-rst","patch_set":14,"id":"7a3c09a3_f2aeee83","line":164,"range":{"start_line":164,"start_character":9,"end_line":164,"end_character":10},"updated":"2017-01-16 16:45:05.000000000","message":"same as previous file.","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":161,"context_line":"----"},{"line_number":162,"context_line":"  Updated migration_start API adding mandatory parameter \u0027preserve_snapshots\u0027"},{"line_number":163,"context_line":"  and changed \u0027preserve_metadata\u0027, \u0027writable\u0027, \u0027nondisruptive\u0027 to be mandatory"},{"line_number":164,"context_line":"  as well."}],"source_content_type":"text/x-rst","patch_set":14,"id":"7a3c09a3_55a08943","line":164,"range":{"start_line":164,"start_character":9,"end_line":164,"end_character":10},"in_reply_to":"7a3c09a3_f2aeee83","updated":"2017-01-16 17:55:37.000000000","message":"Done","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"}],"manila/api/v2/shares.py":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"b32e846a41f867bfad102811504b4c316bcfede4","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def share_force_delete(self, req, id, body):"},{"line_number":79,"context_line":"        return self._force_delete(req, id, body)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @wsgi.Controller.api_version(\u00272.23\u0027, experimental\u003dTrue)"},{"line_number":82,"context_line":"    @wsgi.action(\"migration_start\")"},{"line_number":83,"context_line":"    @wsgi.Controller.authorize"},{"line_number":84,"context_line":"    def migration_start(self, req, id, body):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_b05a9628","line":81,"range":{"start_line":81,"start_character":34,"end_line":81,"end_character":38},"updated":"2016-12-05 13:25:48.000000000","message":"why change to 2.23? is there a migration_start for \"2.22\"?","commit_id":"979104126038abb41207a76e4537ed2833284b62"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"17c37bf275e1673bd4d66fdeab6839d440191119","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def share_force_delete(self, req, id, body):"},{"line_number":79,"context_line":"        return self._force_delete(req, id, body)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @wsgi.Controller.api_version(\u00272.23\u0027, experimental\u003dTrue)"},{"line_number":82,"context_line":"    @wsgi.action(\"migration_start\")"},{"line_number":83,"context_line":"    @wsgi.Controller.authorize"},{"line_number":84,"context_line":"    def migration_start(self, req, id, body):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_b1ece793","line":81,"range":{"start_line":81,"start_character":34,"end_line":81,"end_character":38},"in_reply_to":"3a71b18c_891438e9","updated":"2016-12-07 15:19:54.000000000","message":"I don\u0027t think so, since the behavior hasn\u0027t changed for these APIs. Let\u0027s say a server is running 2.22 and doing a migration, and the client updates to 2.23, in this case the migration can still complete.","commit_id":"979104126038abb41207a76e4537ed2833284b62"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"4c460e3bc1d90a3fa9e4d83fe39af07c477b68e4","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def share_force_delete(self, req, id, body):"},{"line_number":79,"context_line":"        return self._force_delete(req, id, body)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @wsgi.Controller.api_version(\u00272.23\u0027, experimental\u003dTrue)"},{"line_number":82,"context_line":"    @wsgi.action(\"migration_start\")"},{"line_number":83,"context_line":"    @wsgi.Controller.authorize"},{"line_number":84,"context_line":"    def migration_start(self, req, id, body):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_891438e9","line":81,"range":{"start_line":81,"start_character":34,"end_line":81,"end_character":38},"in_reply_to":"3a71b18c_9cb92918","updated":"2016-12-07 09:12:18.000000000","message":"If migration_start doesn\u0027t support 2.22 anymore, how about the other corresponding method, such as migration_complete, migration_get_progress, does they need to bump up as well?","commit_id":"979104126038abb41207a76e4537ed2833284b62"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"64bb0aee3742dbcb6e6acf071d2800724f14fca6","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    def share_force_delete(self, req, id, body):"},{"line_number":79,"context_line":"        return self._force_delete(req, id, body)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    @wsgi.Controller.api_version(\u00272.23\u0027, experimental\u003dTrue)"},{"line_number":82,"context_line":"    @wsgi.action(\"migration_start\")"},{"line_number":83,"context_line":"    @wsgi.Controller.authorize"},{"line_number":84,"context_line":"    def migration_start(self, req, id, body):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_9cb92918","line":81,"range":{"start_line":81,"start_character":34,"end_line":81,"end_character":38},"in_reply_to":"3a71b18c_b05a9628","updated":"2016-12-05 18:19:50.000000000","message":"we are dropping support for 2.22, as 2.22 works without mandatory parameters.","commit_id":"979104126038abb41207a76e4537ed2833284b62"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"bd5f1cbb947239e0b1e8b46fee383221e4662648","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        if not params:"},{"line_number":216,"context_line":"            raise exc.HTTPBadRequest(explanation\u003d_(\"Request is missing body.\"))"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        driver_assisted_params \u003d [\u0027preserve_metadata\u0027, \u0027writable\u0027,"},{"line_number":219,"context_line":"                                  \u0027nondisruptive\u0027, \u0027preserve_snapshots\u0027]"},{"line_number":220,"context_line":"        bool_params \u003d (driver_assisted_params +"},{"line_number":221,"context_line":"                       [\u0027force_host_assisted_migration\u0027])"},{"line_number":222,"context_line":"        mandatory_params \u003d driver_assisted_params + [\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_8454efca","line":219,"range":{"start_line":218,"start_character":34,"end_line":219,"end_character":71},"updated":"2017-01-18 21:54:25.000000000","message":"I really prefer hyphens to underscores in API params. Is there a style guide that says underscores are preffered for openstack?","commit_id":"f5981917ef74595c4654f22e487ce2e9043d8831"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"37ec1ce29e2f2eece35d476d9c97691ce44955a7","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        if not params:"},{"line_number":216,"context_line":"            raise exc.HTTPBadRequest(explanation\u003d_(\"Request is missing body.\"))"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        driver_assisted_params \u003d [\u0027preserve_metadata\u0027, \u0027writable\u0027,"},{"line_number":219,"context_line":"                                  \u0027nondisruptive\u0027, \u0027preserve_snapshots\u0027]"},{"line_number":220,"context_line":"        bool_params \u003d (driver_assisted_params +"},{"line_number":221,"context_line":"                       [\u0027force_host_assisted_migration\u0027])"},{"line_number":222,"context_line":"        mandatory_params \u003d driver_assisted_params + [\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_ba72e6ae","line":219,"range":{"start_line":218,"start_character":34,"end_line":219,"end_character":71},"in_reply_to":"7a3c09a3_8454efca","updated":"2017-01-18 22:07:25.000000000","message":"No style guide.. we had this discussion on the ML:\n\nhttp://lists.openstack.org/pipermail/openstack-dev/2016-November/107466.html \n\nit\u0027s consistency and possibly the correct thing to do as well.\n\nAll other API parameters that have underscores, a small set of examples:\n\nAccess allow, extend, shrink, create share network, create share type.. \n\nhttp://developer.openstack.org/api-ref/shared-file-systems","commit_id":"f5981917ef74595c4654f22e487ce2e9043d8831"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bdcdc9b4032d86f2cd4a54d564d5f356762c0220","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        if not params:"},{"line_number":216,"context_line":"            raise exc.HTTPBadRequest(explanation\u003d_(\"Request is missing body.\"))"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        driver_assisted_params \u003d [\u0027preserve_metadata\u0027, \u0027writable\u0027,"},{"line_number":219,"context_line":"                                  \u0027nondisruptive\u0027, \u0027preserve_snapshots\u0027]"},{"line_number":220,"context_line":"        bool_params \u003d (driver_assisted_params +"},{"line_number":221,"context_line":"                       [\u0027force_host_assisted_migration\u0027])"},{"line_number":222,"context_line":"        mandatory_params \u003d driver_assisted_params + [\u0027host\u0027]"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a3905b3_7aaf92e3","line":219,"range":{"start_line":218,"start_character":34,"end_line":219,"end_character":71},"in_reply_to":"7a3c09a3_ba72e6ae","updated":"2017-01-19 12:47:23.000000000","message":"those API params are in the request body. In that case, should the action name \"migration_start\" use hyphens as well?","commit_id":"f5981917ef74595c4654f22e487ce2e9043d8831"}],"manila/db/sqlalchemy/models.py":[{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"bd5f1cbb947239e0b1e8b46fee383221e4662648","unresolved":false,"context_lines":[{"line_number":627,"context_line":""},{"line_number":628,"context_line":"            snapshot_instances \u003d replica_snapshots or self.instances"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"            order \u003d (constants.STATUS_MIGRATING, constants.STATUS_AVAILABLE,"},{"line_number":631,"context_line":"                     constants.STATUS_ERROR)"},{"line_number":632,"context_line":"            other_statuses \u003d [x[\u0027status\u0027] for x in snapshot_instances if"},{"line_number":633,"context_line":"                              x[\u0027status\u0027] not in order]"}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_c4b8b7eb","line":630,"updated":"2017-01-18 21:54:25.000000000","message":"Error should sort before migrating shouldn\u0027t it? If there\u0027s an error you have to fix it before you can migrate.","commit_id":"f5981917ef74595c4654f22e487ce2e9043d8831"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bdcdc9b4032d86f2cd4a54d564d5f356762c0220","unresolved":false,"context_lines":[{"line_number":627,"context_line":""},{"line_number":628,"context_line":"            snapshot_instances \u003d replica_snapshots or self.instances"},{"line_number":629,"context_line":""},{"line_number":630,"context_line":"            order \u003d (constants.STATUS_MIGRATING, constants.STATUS_AVAILABLE,"},{"line_number":631,"context_line":"                     constants.STATUS_ERROR)"},{"line_number":632,"context_line":"            other_statuses \u003d [x[\u0027status\u0027] for x in snapshot_instances if"},{"line_number":633,"context_line":"                              x[\u0027status\u0027] not in order]"}],"source_content_type":"text/x-python","patch_set":23,"id":"5a3905b3_a4e4810d","line":630,"in_reply_to":"7a3c09a3_c4b8b7eb","updated":"2017-01-19 12:47:23.000000000","message":"if there is a share instance migrating, the aggregate status should show that one, as it is transitional and locks down several other operations. Also, between available and error, if there is an instance in error status, indeed it should show instead of available for the reason you mentioned. Although, since share instances have been introduced, we always preferred to show available instances and ignore error-ed ones and it would be preferrable to be consistent. I can make the change to the migration patch to ignore error\u0027ed snapshot instances, which would be consistent if share instances behavior. I am a bit worried about data-loss by ignoring a snapshot instance with \u0027error\u0027 status when migrating. What do you think?","commit_id":"f5981917ef74595c4654f22e487ce2e9043d8831"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"bd5f1cbb947239e0b1e8b46fee383221e4662648","unresolved":false,"context_lines":[{"line_number":629,"context_line":""},{"line_number":630,"context_line":"            order \u003d (constants.STATUS_MIGRATING, constants.STATUS_AVAILABLE,"},{"line_number":631,"context_line":"                     constants.STATUS_ERROR)"},{"line_number":632,"context_line":"            other_statuses \u003d [x[\u0027status\u0027] for x in snapshot_instances if"},{"line_number":633,"context_line":"                              x[\u0027status\u0027] not in order]"},{"line_number":634,"context_line":"            order \u003d (order + tuple(other_statuses))"},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"            sorted_instances \u003d sorted("}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_4425a708","line":633,"range":{"start_line":632,"start_character":12,"end_line":633,"end_character":55},"updated":"2017-01-18 21:54:25.000000000","message":"other_statuses \u003d set(x[\u0027status\u0027] for x in snapshot_instances)","commit_id":"f5981917ef74595c4654f22e487ce2e9043d8831"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bdcdc9b4032d86f2cd4a54d564d5f356762c0220","unresolved":false,"context_lines":[{"line_number":629,"context_line":""},{"line_number":630,"context_line":"            order \u003d (constants.STATUS_MIGRATING, constants.STATUS_AVAILABLE,"},{"line_number":631,"context_line":"                     constants.STATUS_ERROR)"},{"line_number":632,"context_line":"            other_statuses \u003d [x[\u0027status\u0027] for x in snapshot_instances if"},{"line_number":633,"context_line":"                              x[\u0027status\u0027] not in order]"},{"line_number":634,"context_line":"            order \u003d (order + tuple(other_statuses))"},{"line_number":635,"context_line":""},{"line_number":636,"context_line":"            sorted_instances \u003d sorted("}],"source_content_type":"text/x-python","patch_set":23,"id":"5a3905b3_a43c8130","line":633,"range":{"start_line":632,"start_character":12,"end_line":633,"end_character":55},"in_reply_to":"7a3c09a3_4425a708","updated":"2017-01-19 12:47:23.000000000","message":"those are not equivalent, this produces a set object and will require convertion to tuple below as well","commit_id":"f5981917ef74595c4654f22e487ce2e9043d8831"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"acea9139fd44d6aa77e9bc7cbddb5c0f4cf75d27","unresolved":false,"context_lines":[{"line_number":632,"context_line":"            snapshot_instances \u003d (replica_snapshots or migrating_snapshots"},{"line_number":633,"context_line":"                                  or self.instances)"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"            order \u003d (constants.STATUS_MIGRATING, constants.STATUS_AVAILABLE,"},{"line_number":636,"context_line":"                     constants.STATUS_ERROR)"},{"line_number":637,"context_line":"            other_statuses \u003d [x[\u0027status\u0027] for x in snapshot_instances if"},{"line_number":638,"context_line":"                              x[\u0027status\u0027] not in order]"},{"line_number":639,"context_line":"            order \u003d (order + tuple(other_statuses))"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"            sorted_instances \u003d sorted("},{"line_number":642,"context_line":"                snapshot_instances, key\u003dlambda x: order.index(x[\u0027status\u0027]))"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"            result \u003d sorted_instances[0]"},{"line_number":645,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_cb033a72","line":642,"range":{"start_line":635,"start_character":0,"end_line":642,"end_character":75},"updated":"2017-01-19 21:55:38.000000000","message":"why do you need this after the above?","commit_id":"3b8fafde89aa8ac6b2b532ab576ba5ec9b093664"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"acea9139fd44d6aa77e9bc7cbddb5c0f4cf75d27","unresolved":false,"context_lines":[{"line_number":667,"context_line":"            return self.status"},{"line_number":668,"context_line":""},{"line_number":669,"context_line":"        order \u003d (constants.STATUS_DELETING, constants.STATUS_CREATING,"},{"line_number":670,"context_line":"                 constants.STATUS_ERROR, constants.STATUS_MIGRATING,"},{"line_number":671,"context_line":"                 constants.STATUS_AVAILABLE)"},{"line_number":672,"context_line":"        other_statuses \u003d [x[\u0027status\u0027] for x in self.instances if"},{"line_number":673,"context_line":"                          x[\u0027status\u0027] not in order]"},{"line_number":674,"context_line":"        order \u003d (order + tuple(other_statuses))"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_6b1246b6","line":671,"range":{"start_line":670,"start_character":0,"end_line":671,"end_character":44},"updated":"2017-01-19 21:55:38.000000000","message":"+1","commit_id":"3b8fafde89aa8ac6b2b532ab576ba5ec9b093664"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"e1d9e6d8518083c1c2c296a24e18870682cc4b4f","unresolved":false,"context_lines":[{"line_number":632,"context_line":"            snapshot_instances \u003d (replica_snapshots or migrating_snapshots"},{"line_number":633,"context_line":"                                  or self.instances)"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"            order \u003d (constants.STATUS_MIGRATING, constants.STATUS_AVAILABLE,"},{"line_number":636,"context_line":"                     constants.STATUS_ERROR)"},{"line_number":637,"context_line":"            other_statuses \u003d [x[\u0027status\u0027] for x in snapshot_instances if"},{"line_number":638,"context_line":"                              x[\u0027status\u0027] not in order]"},{"line_number":639,"context_line":"            order \u003d (order + tuple(other_statuses))"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"            sorted_instances \u003d sorted("},{"line_number":642,"context_line":"                snapshot_instances, key\u003dlambda x: order.index(x[\u0027status\u0027]))"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"            result \u003d sorted_instances[0]"},{"line_number":645,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"5a3905b3_fa08b5db","line":642,"range":{"start_line":635,"start_character":12,"end_line":642,"end_character":75},"updated":"2017-01-20 03:27:10.000000000","message":"We should remove all of this sorting logic. The list should never contain more than 1 member (except in the active-active replication case I suppose).","commit_id":"d2ac24197a0203154686104dd04df37d1794f85b"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"b60e91687b3827cff280d3a82d7cd11bd2475548","unresolved":false,"context_lines":[{"line_number":632,"context_line":"            snapshot_instances \u003d (replica_snapshots or migrating_snapshots"},{"line_number":633,"context_line":"                                  or self.instances)"},{"line_number":634,"context_line":""},{"line_number":635,"context_line":"            order \u003d (constants.STATUS_MIGRATING, constants.STATUS_AVAILABLE,"},{"line_number":636,"context_line":"                     constants.STATUS_ERROR)"},{"line_number":637,"context_line":"            other_statuses \u003d [x[\u0027status\u0027] for x in snapshot_instances if"},{"line_number":638,"context_line":"                              x[\u0027status\u0027] not in order]"},{"line_number":639,"context_line":"            order \u003d (order + tuple(other_statuses))"},{"line_number":640,"context_line":""},{"line_number":641,"context_line":"            sorted_instances \u003d sorted("},{"line_number":642,"context_line":"                snapshot_instances, key\u003dlambda x: order.index(x[\u0027status\u0027]))"},{"line_number":643,"context_line":""},{"line_number":644,"context_line":"            result \u003d sorted_instances[0]"},{"line_number":645,"context_line":""}],"source_content_type":"text/x-python","patch_set":26,"id":"5a3905b3_4dbae324","line":642,"range":{"start_line":635,"start_character":12,"end_line":642,"end_character":75},"in_reply_to":"5a3905b3_fa08b5db","updated":"2017-01-20 10:17:12.000000000","message":"Done","commit_id":"d2ac24197a0203154686104dd04df37d1794f85b"}],"manila/share/api.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c68a2143eb572062b60fc3c2036b64aefc559368","unresolved":false,"context_lines":[{"line_number":885,"context_line":"        if force_host_assisted_migration and ("},{"line_number":886,"context_line":"                preserve_metadata or writable or nondisruptive or"},{"line_number":887,"context_line":"                preserve_snapshots):"},{"line_number":888,"context_line":"            msg \u003d _(\u0027Invalid parameter combination. Cannot use driver-assisted\u0027"},{"line_number":889,"context_line":"                    \u0027 parameters with \"force_host_assisted_migration\"\u0027"},{"line_number":890,"context_line":"                    \u0027 enabled.\u0027)"},{"line_number":891,"context_line":"            LOG.error(msg)"},{"line_number":892,"context_line":"            raise exception.Conflict(err\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_d3f23f6f","line":889,"range":{"start_line":888,"start_character":63,"end_line":889,"end_character":32},"updated":"2016-12-22 14:10:00.000000000","message":"kinda vague. Suggest:\n\n \nInvalid parameter combination. Cannot set parameters \"nondisruptive\",\n \"preserve-snapshots\", \"preserve-metadata\" or \"writable\" to True\n when enabling the \"force_host_assisted_migration\" option.\n\n\nIt\u0027s nice to be explicit to human requesters.","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"eaef5634c4f3540813c39445eb4ebb904415b4f2","unresolved":false,"context_lines":[{"line_number":885,"context_line":"        if force_host_assisted_migration and ("},{"line_number":886,"context_line":"                preserve_metadata or writable or nondisruptive or"},{"line_number":887,"context_line":"                preserve_snapshots):"},{"line_number":888,"context_line":"            msg \u003d _(\u0027Invalid parameter combination. Cannot use driver-assisted\u0027"},{"line_number":889,"context_line":"                    \u0027 parameters with \"force_host_assisted_migration\"\u0027"},{"line_number":890,"context_line":"                    \u0027 enabled.\u0027)"},{"line_number":891,"context_line":"            LOG.error(msg)"},{"line_number":892,"context_line":"            raise exception.Conflict(err\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_0f39a641","line":889,"range":{"start_line":888,"start_character":63,"end_line":889,"end_character":32},"in_reply_to":"da4df55a_d3f23f6f","updated":"2016-12-23 20:06:30.000000000","message":"Done","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c68a2143eb572062b60fc3c2036b64aefc559368","unresolved":false,"context_lines":[{"line_number":889,"context_line":"                    \u0027 parameters with \"force_host_assisted_migration\"\u0027"},{"line_number":890,"context_line":"                    \u0027 enabled.\u0027)"},{"line_number":891,"context_line":"            LOG.error(msg)"},{"line_number":892,"context_line":"            raise exception.Conflict(err\u003dmsg)"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":"        share_instance \u003d share.instance"},{"line_number":895,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_f334a34b","line":892,"range":{"start_line":892,"start_character":1,"end_line":892,"end_character":45},"updated":"2016-12-22 14:10:00.000000000","message":"https://specs.openstack.org/openstack/api-wg/guidelines/http.html\n\n\nThis needs to be HTTPBadRequest.","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"eaef5634c4f3540813c39445eb4ebb904415b4f2","unresolved":false,"context_lines":[{"line_number":889,"context_line":"                    \u0027 parameters with \"force_host_assisted_migration\"\u0027"},{"line_number":890,"context_line":"                    \u0027 enabled.\u0027)"},{"line_number":891,"context_line":"            LOG.error(msg)"},{"line_number":892,"context_line":"            raise exception.Conflict(err\u003dmsg)"},{"line_number":893,"context_line":""},{"line_number":894,"context_line":"        share_instance \u003d share.instance"},{"line_number":895,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_af797afe","line":892,"range":{"start_line":892,"start_character":1,"end_line":892,"end_character":45},"in_reply_to":"da4df55a_f334a34b","updated":"2016-12-23 20:06:30.000000000","message":"Done","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c68a2143eb572062b60fc3c2036b64aefc559368","unresolved":false,"context_lines":[{"line_number":957,"context_line":"        if (new_share_network_id \u003d\u003d share_instance[\u0027share_network_id\u0027] and"},{"line_number":958,"context_line":"                new_share_type_id \u003d\u003d share_instance[\u0027share_type_id\u0027] and"},{"line_number":959,"context_line":"                dest_host \u003d\u003d share_instance[\u0027host\u0027]):"},{"line_number":960,"context_line":"            msg \u003d _(\"Destination host (%(dest_host)s), share network \""},{"line_number":961,"context_line":"                    \"(%(dest_sn)s) or share type (%(dest_st)s) must be\""},{"line_number":962,"context_line":"                    \" different than the current host\u0027s \u0027%(src_host)s\u0027, \""},{"line_number":963,"context_line":"                    \"\u0027%(src_sn)s\u0027 and \u0027%(src_st)s\u0027 respectively.\") % {"},{"line_number":964,"context_line":"                \u0027dest_host\u0027: dest_host,"},{"line_number":965,"context_line":"                \u0027dest_sn\u0027: new_share_network_id,"},{"line_number":966,"context_line":"                \u0027dest_st\u0027: new_share_type_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_6ec1a680","line":963,"range":{"start_line":960,"start_character":20,"end_line":963,"end_character":65},"updated":"2016-12-22 14:10:00.000000000","message":"These values are present on the share or in the request. \n\nThis case is similar to a user requesting that an active replica be promoted to active... This can\u0027t really be a \"BadRequest\"; the resource is already in the state that it\u0027s being requested to be in. No work to do any further; so instead of a 400 (Bad Request) and a 202 (Accepted), you can log this message and return a 200...","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"eaef5634c4f3540813c39445eb4ebb904415b4f2","unresolved":false,"context_lines":[{"line_number":957,"context_line":"        if (new_share_network_id \u003d\u003d share_instance[\u0027share_network_id\u0027] and"},{"line_number":958,"context_line":"                new_share_type_id \u003d\u003d share_instance[\u0027share_type_id\u0027] and"},{"line_number":959,"context_line":"                dest_host \u003d\u003d share_instance[\u0027host\u0027]):"},{"line_number":960,"context_line":"            msg \u003d _(\"Destination host (%(dest_host)s), share network \""},{"line_number":961,"context_line":"                    \"(%(dest_sn)s) or share type (%(dest_st)s) must be\""},{"line_number":962,"context_line":"                    \" different than the current host\u0027s \u0027%(src_host)s\u0027, \""},{"line_number":963,"context_line":"                    \"\u0027%(src_sn)s\u0027 and \u0027%(src_st)s\u0027 respectively.\") % {"},{"line_number":964,"context_line":"                \u0027dest_host\u0027: dest_host,"},{"line_number":965,"context_line":"                \u0027dest_sn\u0027: new_share_network_id,"},{"line_number":966,"context_line":"                \u0027dest_st\u0027: new_share_type_id,"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_8fe1169d","line":963,"range":{"start_line":960,"start_character":20,"end_line":963,"end_character":65},"in_reply_to":"da4df55a_6ec1a680","updated":"2016-12-23 20:06:30.000000000","message":"Done","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":926,"context_line":"                preserve_metadata or writable or nondisruptive or"},{"line_number":927,"context_line":"                preserve_snapshots):"},{"line_number":928,"context_line":"            msg \u003d _(\u0027Invalid parameter combination. Cannot set parameters \u0027"},{"line_number":929,"context_line":"                    \u0027\"nondisruptive\", \"writable\", \"preserve-snapshots\" or \u0027"},{"line_number":930,"context_line":"                    \u0027\"preserve-metadata\" to True when enabling the \u0027"},{"line_number":931,"context_line":"                    \u0027\"force_host_assisted_migration\" option.\u0027)"},{"line_number":932,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_d2fe5237","line":929,"range":{"start_line":929,"start_character":59,"end_line":929,"end_character":60},"updated":"2017-01-16 16:45:05.000000000","message":"_","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":926,"context_line":"                preserve_metadata or writable or nondisruptive or"},{"line_number":927,"context_line":"                preserve_snapshots):"},{"line_number":928,"context_line":"            msg \u003d _(\u0027Invalid parameter combination. Cannot set parameters \u0027"},{"line_number":929,"context_line":"                    \u0027\"nondisruptive\", \"writable\", \"preserve-snapshots\" or \u0027"},{"line_number":930,"context_line":"                    \u0027\"preserve-metadata\" to True when enabling the \u0027"},{"line_number":931,"context_line":"                    \u0027\"force_host_assisted_migration\" option.\u0027)"},{"line_number":932,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_55b7a985","line":929,"range":{"start_line":929,"start_character":59,"end_line":929,"end_character":60},"in_reply_to":"7a3c09a3_d2fe5237","updated":"2017-01-16 17:55:37.000000000","message":"Done","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":927,"context_line":"                preserve_snapshots):"},{"line_number":928,"context_line":"            msg \u003d _(\u0027Invalid parameter combination. Cannot set parameters \u0027"},{"line_number":929,"context_line":"                    \u0027\"nondisruptive\", \"writable\", \"preserve-snapshots\" or \u0027"},{"line_number":930,"context_line":"                    \u0027\"preserve-metadata\" to True when enabling the \u0027"},{"line_number":931,"context_line":"                    \u0027\"force_host_assisted_migration\" option.\u0027)"},{"line_number":932,"context_line":"            LOG.error(msg)"},{"line_number":933,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_f2fd0e3b","line":930,"range":{"start_line":930,"start_character":30,"end_line":930,"end_character":31},"updated":"2017-01-16 16:45:05.000000000","message":"_","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":927,"context_line":"                preserve_snapshots):"},{"line_number":928,"context_line":"            msg \u003d _(\u0027Invalid parameter combination. Cannot set parameters \u0027"},{"line_number":929,"context_line":"                    \u0027\"nondisruptive\", \"writable\", \"preserve-snapshots\" or \u0027"},{"line_number":930,"context_line":"                    \u0027\"preserve-metadata\" to True when enabling the \u0027"},{"line_number":931,"context_line":"                    \u0027\"force_host_assisted_migration\" option.\u0027)"},{"line_number":932,"context_line":"            LOG.error(msg)"},{"line_number":933,"context_line":"            raise exception.InvalidInput(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_75bae56f","line":930,"range":{"start_line":930,"start_character":30,"end_line":930,"end_character":31},"in_reply_to":"7a3c09a3_f2fd0e3b","updated":"2017-01-16 17:55:37.000000000","message":"Done","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"            msg \u003d _(\"Destination host (%(dest_host)s), share network \""},{"line_number":1021,"context_line":"                    \"(%(dest_sn)s) or share type (%(dest_st)s) are the same as\""},{"line_number":1022,"context_line":"                    \" the current host\u0027s \u0027%(src_host)s\u0027, \u0027%(src_sn)s\u0027 and \""},{"line_number":1023,"context_line":"                    \"\u0027%(src_st)s\u0027 respectively. Nothing to be done\") % {"},{"line_number":1024,"context_line":"                \u0027dest_host\u0027: dest_host,"},{"line_number":1025,"context_line":"                \u0027dest_sn\u0027: new_share_network_id,"},{"line_number":1026,"context_line":"                \u0027dest_st\u0027: new_share_type_id,"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_f2826e93","line":1023,"range":{"start_line":1023,"start_character":62,"end_line":1023,"end_character":66},"updated":"2017-01-16 16:45:05.000000000","message":"nit: period","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":1020,"context_line":"            msg \u003d _(\"Destination host (%(dest_host)s), share network \""},{"line_number":1021,"context_line":"                    \"(%(dest_sn)s) or share type (%(dest_st)s) are the same as\""},{"line_number":1022,"context_line":"                    \" the current host\u0027s \u0027%(src_host)s\u0027, \u0027%(src_sn)s\u0027 and \""},{"line_number":1023,"context_line":"                    \"\u0027%(src_st)s\u0027 respectively. Nothing to be done\") % {"},{"line_number":1024,"context_line":"                \u0027dest_host\u0027: dest_host,"},{"line_number":1025,"context_line":"                \u0027dest_sn\u0027: new_share_network_id,"},{"line_number":1026,"context_line":"                \u0027dest_st\u0027: new_share_type_id,"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_35677d26","line":1023,"range":{"start_line":1023,"start_character":62,"end_line":1023,"end_character":66},"in_reply_to":"7a3c09a3_f2826e93","updated":"2017-01-16 17:55:37.000000000","message":"Thanks, now I need to punish myself for forgetting a period xD","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":1032,"context_line":"            self.db.share_update("},{"line_number":1033,"context_line":"                context, share[\u0027id\u0027],"},{"line_number":1034,"context_line":"                {\u0027task_state\u0027: constants.TASK_STATE_MIGRATION_SUCCESS})"},{"line_number":1035,"context_line":"            return"},{"line_number":1036,"context_line":""},{"line_number":1037,"context_line":"        service \u003d self.db.service_get_by_args("},{"line_number":1038,"context_line":"            context, dest_host_host, \u0027manila-share\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_4d51e30d","line":1035,"range":{"start_line":1035,"start_character":0,"end_line":1035,"end_character":18},"updated":"2017-01-16 16:45:05.000000000","message":"But you\u0027ll still respond with 202... maybe return the status code?","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":1032,"context_line":"            self.db.share_update("},{"line_number":1033,"context_line":"                context, share[\u0027id\u0027],"},{"line_number":1034,"context_line":"                {\u0027task_state\u0027: constants.TASK_STATE_MIGRATION_SUCCESS})"},{"line_number":1035,"context_line":"            return"},{"line_number":1036,"context_line":""},{"line_number":1037,"context_line":"        service \u003d self.db.service_get_by_args("},{"line_number":1038,"context_line":"            context, dest_host_host, \u0027manila-share\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_1800f800","line":1035,"range":{"start_line":1035,"start_character":0,"end_line":1035,"end_character":18},"in_reply_to":"7a3c09a3_4d51e30d","updated":"2017-01-16 17:55:37.000000000","message":"I believe this would end up being inconsistent from the behavior where it is async, unless I print something like \"request accepted\", but this would deviate the behavior from other async APIs, such as delete, extend etc","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d9d641f06471b02cb0f8d3825a038f8104beae90","unresolved":false,"context_lines":[{"line_number":1032,"context_line":"            self.db.share_update("},{"line_number":1033,"context_line":"                context, share[\u0027id\u0027],"},{"line_number":1034,"context_line":"                {\u0027task_state\u0027: constants.TASK_STATE_MIGRATION_SUCCESS})"},{"line_number":1035,"context_line":"            return"},{"line_number":1036,"context_line":""},{"line_number":1037,"context_line":"        service \u003d self.db.service_get_by_args("},{"line_number":1038,"context_line":"            context, dest_host_host, \u0027manila-share\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_c7dcc475","line":1035,"range":{"start_line":1035,"start_character":0,"end_line":1035,"end_character":18},"updated":"2017-01-16 20:18:35.000000000","message":"What I mean is, if you have nothing to do, you should return a 200 OK.\n\nIt\u0027s not asynchronous. you\u0027re doing the right thing informing the API user that you have nothing to do.","commit_id":"8e15b1862ec556b6463ce1e8fb0d2400a4c94404"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"673b23d4ef551f074aa6abb772077f36ac3c07d4","unresolved":false,"context_lines":[{"line_number":1032,"context_line":"            self.db.share_update("},{"line_number":1033,"context_line":"                context, share[\u0027id\u0027],"},{"line_number":1034,"context_line":"                {\u0027task_state\u0027: constants.TASK_STATE_MIGRATION_SUCCESS})"},{"line_number":1035,"context_line":"            return"},{"line_number":1036,"context_line":""},{"line_number":1037,"context_line":"        service \u003d self.db.service_get_by_args("},{"line_number":1038,"context_line":"            context, dest_host_host, \u0027manila-share\u0027)"}],"source_content_type":"text/x-python","patch_set":17,"id":"7a3c09a3_93703ede","line":1035,"range":{"start_line":1035,"start_character":0,"end_line":1035,"end_character":18},"in_reply_to":"7a3c09a3_c7dcc475","updated":"2017-01-16 22:07:39.000000000","message":"Done","commit_id":"8e15b1862ec556b6463ce1e8fb0d2400a4c94404"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"b1e6a2b9ca22083371139c0ae1ec3184e4e988c7","unresolved":false,"context_lines":[{"line_number":945,"context_line":"        if force_host_assisted_migration:"},{"line_number":946,"context_line":"            # We only handle shares without snapshots for"},{"line_number":947,"context_line":"            # host-assisted migration"},{"line_number":948,"context_line":"            snaps \u003d self.db.share_snapshot_get_all_for_share(context,"},{"line_number":949,"context_line":"                                                             share[\u0027id\u0027])"},{"line_number":950,"context_line":"            if snaps:"},{"line_number":951,"context_line":"                msg \u003d _(\"Share %s must not have snapshots when using \""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_ff52eb65","line":948,"updated":"2017-01-17 21:25:57.000000000","message":"I\u0027d move this check with a db call below the faster status checks.","commit_id":"7e99f4f1ee11c9e091a6d6933357b7c2a2098407"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"995a4144fe55fbae21d644193656295a64517c81","unresolved":false,"context_lines":[{"line_number":945,"context_line":"        if force_host_assisted_migration:"},{"line_number":946,"context_line":"            # We only handle shares without snapshots for"},{"line_number":947,"context_line":"            # host-assisted migration"},{"line_number":948,"context_line":"            snaps \u003d self.db.share_snapshot_get_all_for_share(context,"},{"line_number":949,"context_line":"                                                             share[\u0027id\u0027])"},{"line_number":950,"context_line":"            if snaps:"},{"line_number":951,"context_line":"                msg \u003d _(\"Share %s must not have snapshots when using \""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_00ec9628","line":948,"in_reply_to":"7a3c09a3_ff52eb65","updated":"2017-01-18 11:36:42.000000000","message":"Done","commit_id":"7e99f4f1ee11c9e091a6d6933357b7c2a2098407"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"b1e6a2b9ca22083371139c0ae1ec3184e4e988c7","unresolved":false,"context_lines":[{"line_number":1017,"context_line":"        if (new_share_network_id \u003d\u003d share_instance[\u0027share_network_id\u0027] and"},{"line_number":1018,"context_line":"                new_share_type_id \u003d\u003d share_instance[\u0027share_type_id\u0027] and"},{"line_number":1019,"context_line":"                dest_host \u003d\u003d share_instance[\u0027host\u0027]):"},{"line_number":1020,"context_line":"            msg \u003d _(\"Destination host (%(dest_host)s), share network \""},{"line_number":1021,"context_line":"                    \"(%(dest_sn)s) or share type (%(dest_st)s) are the same as\""},{"line_number":1022,"context_line":"                    \" the current host\u0027s \u0027%(src_host)s\u0027, \u0027%(src_sn)s\u0027 and \""},{"line_number":1023,"context_line":"                    \"\u0027%(src_st)s\u0027 respectively. Nothing to be done.\") % {"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_bfd303d4","line":1020,"range":{"start_line":1020,"start_character":18,"end_line":1020,"end_character":19},"updated":"2017-01-17 21:25:57.000000000","message":"_LI","commit_id":"7e99f4f1ee11c9e091a6d6933357b7c2a2098407"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"995a4144fe55fbae21d644193656295a64517c81","unresolved":false,"context_lines":[{"line_number":1017,"context_line":"        if (new_share_network_id \u003d\u003d share_instance[\u0027share_network_id\u0027] and"},{"line_number":1018,"context_line":"                new_share_type_id \u003d\u003d share_instance[\u0027share_type_id\u0027] and"},{"line_number":1019,"context_line":"                dest_host \u003d\u003d share_instance[\u0027host\u0027]):"},{"line_number":1020,"context_line":"            msg \u003d _(\"Destination host (%(dest_host)s), share network \""},{"line_number":1021,"context_line":"                    \"(%(dest_sn)s) or share type (%(dest_st)s) are the same as\""},{"line_number":1022,"context_line":"                    \" the current host\u0027s \u0027%(src_host)s\u0027, \u0027%(src_sn)s\u0027 and \""},{"line_number":1023,"context_line":"                    \"\u0027%(src_st)s\u0027 respectively. Nothing to be done.\") % {"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_809966c6","line":1020,"range":{"start_line":1020,"start_character":18,"end_line":1020,"end_character":19},"in_reply_to":"7a3c09a3_bfd303d4","updated":"2017-01-18 11:36:42.000000000","message":"Done","commit_id":"7e99f4f1ee11c9e091a6d6933357b7c2a2098407"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"b1e6a2b9ca22083371139c0ae1ec3184e4e988c7","unresolved":false,"context_lines":[{"line_number":1031,"context_line":"            LOG.info(msg)"},{"line_number":1032,"context_line":"            self.db.share_update("},{"line_number":1033,"context_line":"                context, share[\u0027id\u0027],"},{"line_number":1034,"context_line":"                {\u0027task_state\u0027: constants.TASK_STATE_MIGRATION_SUCCESS})"},{"line_number":1035,"context_line":"            return 200"},{"line_number":1036,"context_line":""},{"line_number":1037,"context_line":"        service \u003d self.db.service_get_by_args("}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_1fe5f7a6","line":1034,"range":{"start_line":1034,"start_character":62,"end_line":1034,"end_character":69},"updated":"2017-01-17 21:25:57.000000000","message":"I think it might be better to error if a migration request is a no-op. (?)","commit_id":"7e99f4f1ee11c9e091a6d6933357b7c2a2098407"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"995a4144fe55fbae21d644193656295a64517c81","unresolved":false,"context_lines":[{"line_number":1031,"context_line":"            LOG.info(msg)"},{"line_number":1032,"context_line":"            self.db.share_update("},{"line_number":1033,"context_line":"                context, share[\u0027id\u0027],"},{"line_number":1034,"context_line":"                {\u0027task_state\u0027: constants.TASK_STATE_MIGRATION_SUCCESS})"},{"line_number":1035,"context_line":"            return 200"},{"line_number":1036,"context_line":""},{"line_number":1037,"context_line":"        service \u003d self.db.service_get_by_args("}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_a0f742d1","line":1034,"range":{"start_line":1034,"start_character":62,"end_line":1034,"end_character":69},"in_reply_to":"7a3c09a3_1fe5f7a6","updated":"2017-01-18 11:36:42.000000000","message":"We could discuss this at the IRC channel or weekly meeting. Some people believe it is best to return success instead of an error saying invalidInput","commit_id":"7e99f4f1ee11c9e091a6d6933357b7c2a2098407"}],"manila/share/driver.py":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"b32e846a41f867bfad102811504b4c316bcfede4","unresolved":false,"context_lines":[{"line_number":469,"context_line":"                        {"},{"line_number":470,"context_line":"                        \u0027provider_location\u0027: \u0027/snapshots/foo/bar_1\u0027"},{"line_number":471,"context_line":"                        },"},{"line_number":472,"context_line":"                    },"},{"line_number":473,"context_line":"                        \u00272e62b7ea-4e30-445f-bc05-fd523ca62941\u0027:"},{"line_number":474,"context_line":"                        {"},{"line_number":475,"context_line":"                        \u0027provider_location\u0027: \u0027/snapshots/foo/bar_2\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_6bc1f353","line":472,"range":{"start_line":472,"start_character":19,"end_line":472,"end_character":22},"updated":"2016-12-05 13:25:48.000000000","message":"remove","commit_id":"979104126038abb41207a76e4537ed2833284b62"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"64bb0aee3742dbcb6e6acf071d2800724f14fca6","unresolved":false,"context_lines":[{"line_number":469,"context_line":"                        {"},{"line_number":470,"context_line":"                        \u0027provider_location\u0027: \u0027/snapshots/foo/bar_1\u0027"},{"line_number":471,"context_line":"                        },"},{"line_number":472,"context_line":"                    },"},{"line_number":473,"context_line":"                        \u00272e62b7ea-4e30-445f-bc05-fd523ca62941\u0027:"},{"line_number":474,"context_line":"                        {"},{"line_number":475,"context_line":"                        \u0027provider_location\u0027: \u0027/snapshots/foo/bar_2\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_fc55bdc1","line":472,"range":{"start_line":472,"start_character":19,"end_line":472,"end_character":22},"in_reply_to":"3a71b18c_6bc1f353","updated":"2016-12-05 18:19:50.000000000","message":"Done","commit_id":"979104126038abb41207a76e4537ed2833284b62"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c68a2143eb572062b60fc3c2036b64aefc559368","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"da4df55a_272deaa7","updated":"2016-12-22 14:10:00.000000000","message":"Please run this locally and fix the warnings that these interfaces have... we\u0027ve intentionally suppressed warnings at the gate, but we should fix these sphinx warnings..","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"eaef5634c4f3540813c39445eb4ebb904415b4f2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"da4df55a_2f03ca43","in_reply_to":"da4df55a_272deaa7","updated":"2016-12-23 20:06:30.000000000","message":"Done","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c68a2143eb572062b60fc3c2036b64aefc559368","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        :param share_server: Share server model or None."},{"line_number":446,"context_line":"        :param destination_share_server: Destination Share server model or"},{"line_number":447,"context_line":"            None."},{"line_number":448,"context_line":"        :return: A dictionary containing a list of export locations and a list"},{"line_number":449,"context_line":"            of model updates for each snapshot indexed by their IDs."},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"            Example::"},{"line_number":452,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_47958ee2","line":449,"range":{"start_line":448,"start_character":0,"end_line":449,"end_character":68},"updated":"2016-12-22 14:10:00.000000000","message":"Is this dictionary mandatory?","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"eaef5634c4f3540813c39445eb4ebb904415b4f2","unresolved":false,"context_lines":[{"line_number":445,"context_line":"        :param share_server: Share server model or None."},{"line_number":446,"context_line":"        :param destination_share_server: Destination Share server model or"},{"line_number":447,"context_line":"            None."},{"line_number":448,"context_line":"        :return: A dictionary containing a list of export locations and a list"},{"line_number":449,"context_line":"            of model updates for each snapshot indexed by their IDs."},{"line_number":450,"context_line":""},{"line_number":451,"context_line":"            Example::"},{"line_number":452,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_cf66be28","line":449,"range":{"start_line":448,"start_character":0,"end_line":449,"end_character":68},"in_reply_to":"da4df55a_47958ee2","updated":"2016-12-23 20:06:30.000000000","message":"if you don\u0027t have any anything to update no. I will clarify.","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"}],"manila/share/drivers/zfsonlinux/driver.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c68a2143eb572062b60fc3c2036b64aefc559368","unresolved":false,"context_lines":[{"line_number":1367,"context_line":"            \u0027writable\u0027: False,"},{"line_number":1368,"context_line":"            \u0027preserve_metadata\u0027: True,"},{"line_number":1369,"context_line":"            \u0027nondisruptive\u0027: True,"},{"line_number":1370,"context_line":"            \u0027preserve_snapshots\u0027: False,"},{"line_number":1371,"context_line":"        }"},{"line_number":1372,"context_line":""},{"line_number":1373,"context_line":"    @ensure_share_server_not_provided"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_7c7ce972","line":1370,"range":{"start_line":1370,"start_character":0,"end_line":1370,"end_character":40},"updated":"2016-12-22 14:10:00.000000000","message":"We *can* preserve snapshots with this driver.. If you\u0027re planning to add that in another patch, don\u0027t change this line .","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"eaef5634c4f3540813c39445eb4ebb904415b4f2","unresolved":false,"context_lines":[{"line_number":1367,"context_line":"            \u0027writable\u0027: False,"},{"line_number":1368,"context_line":"            \u0027preserve_metadata\u0027: True,"},{"line_number":1369,"context_line":"            \u0027nondisruptive\u0027: True,"},{"line_number":1370,"context_line":"            \u0027preserve_snapshots\u0027: False,"},{"line_number":1371,"context_line":"        }"},{"line_number":1372,"context_line":""},{"line_number":1373,"context_line":"    @ensure_share_server_not_provided"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_cf1b1e7f","line":1370,"range":{"start_line":1370,"start_character":0,"end_line":1370,"end_character":40},"in_reply_to":"da4df55a_7c7ce972","updated":"2016-12-23 20:06:30.000000000","message":"Done","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"}],"manila/share/manager.py":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"b32e846a41f867bfad102811504b4c316bcfede4","unresolved":false,"context_lines":[{"line_number":746,"context_line":"            snapshot_mapping \u003d {}"},{"line_number":747,"context_line":"            src_snap_instances \u003d []"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"            if compatibility.get(\u0027preserve_snapshots\u0027):"},{"line_number":750,"context_line":"                src_snapshots \u003d self.db.share_snapshot_get_all_for_share("},{"line_number":751,"context_line":"                    context, share_ref[\u0027id\u0027])"},{"line_number":752,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_70671e4d","line":749,"range":{"start_line":749,"start_character":15,"end_line":749,"end_character":55},"updated":"2016-12-05 13:25:48.000000000","message":"if preserve_snapshots \u003d\u003d False, need to get src_snap_instances as well?","commit_id":"979104126038abb41207a76e4537ed2833284b62"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"64bb0aee3742dbcb6e6acf071d2800724f14fca6","unresolved":false,"context_lines":[{"line_number":746,"context_line":"            snapshot_mapping \u003d {}"},{"line_number":747,"context_line":"            src_snap_instances \u003d []"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"            if compatibility.get(\u0027preserve_snapshots\u0027):"},{"line_number":750,"context_line":"                src_snapshots \u003d self.db.share_snapshot_get_all_for_share("},{"line_number":751,"context_line":"                    context, share_ref[\u0027id\u0027])"},{"line_number":752,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_bc2d0548","line":749,"range":{"start_line":749,"start_character":15,"end_line":749,"end_character":55},"in_reply_to":"3a71b18c_70671e4d","updated":"2016-12-05 18:19:50.000000000","message":"Good point, need to error out here","commit_id":"979104126038abb41207a76e4537ed2833284b62"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"b32e846a41f867bfad102811504b4c316bcfede4","unresolved":false,"context_lines":[{"line_number":771,"context_line":""},{"line_number":772,"context_line":"                for snap_instance in src_snap_instances:"},{"line_number":773,"context_line":"                    snap_instance_data.update("},{"line_number":774,"context_line":"                        {\u0027share_instance_id\u0027: dest_share_instance[\u0027id\u0027]})"},{"line_number":775,"context_line":"                    snapshot_mapping[snap_instance[\u0027id\u0027]] \u003d ("},{"line_number":776,"context_line":"                        self.db.share_snapshot_instance_create("},{"line_number":777,"context_line":"                            context, snap_instance[\u0027snapshot_id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_3054c61f","line":774,"range":{"start_line":774,"start_character":25,"end_line":774,"end_character":71},"updated":"2016-12-05 13:25:48.000000000","message":"move this to the snap_instance_data initialization better?","commit_id":"979104126038abb41207a76e4537ed2833284b62"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"64bb0aee3742dbcb6e6acf071d2800724f14fca6","unresolved":false,"context_lines":[{"line_number":771,"context_line":""},{"line_number":772,"context_line":"                for snap_instance in src_snap_instances:"},{"line_number":773,"context_line":"                    snap_instance_data.update("},{"line_number":774,"context_line":"                        {\u0027share_instance_id\u0027: dest_share_instance[\u0027id\u0027]})"},{"line_number":775,"context_line":"                    snapshot_mapping[snap_instance[\u0027id\u0027]] \u003d ("},{"line_number":776,"context_line":"                        self.db.share_snapshot_instance_create("},{"line_number":777,"context_line":"                            context, snap_instance[\u0027snapshot_id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_3ccc9569","line":774,"range":{"start_line":774,"start_character":25,"end_line":774,"end_character":71},"in_reply_to":"3a71b18c_3054c61f","updated":"2016-12-05 18:19:50.000000000","message":"Done","commit_id":"979104126038abb41207a76e4537ed2833284b62"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c68a2143eb572062b60fc3c2036b64aefc559368","unresolved":false,"context_lines":[{"line_number":750,"context_line":""},{"line_number":751,"context_line":"            if compatibility.get(\u0027preserve_snapshots\u0027):"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"                # Make sure all snapshots are \u0027available\u0027"},{"line_number":754,"context_line":"                if any(x[\u0027status\u0027] !\u003d constants.STATUS_AVAILABLE"},{"line_number":755,"context_line":"                       for x in src_snapshots):"},{"line_number":756,"context_line":"                    msg \u003d _("},{"line_number":757,"context_line":"                        \"All snapshots must have \u0027%(status)s\u0027 status to be \""},{"line_number":758,"context_line":"                        \"migrated by the driver along with share \""},{"line_number":759,"context_line":"                        \"%(share)s.\") % {"},{"line_number":760,"context_line":"                            \u0027share\u0027: share_ref[\u0027id\u0027],"},{"line_number":761,"context_line":"                            \u0027status\u0027: constants.STATUS_AVAILABLE"},{"line_number":762,"context_line":"                        }"},{"line_number":763,"context_line":"                    raise exception.ShareMigrationFailed(reason\u003dmsg)"},{"line_number":764,"context_line":""},{"line_number":765,"context_line":"                src_snap_instances \u003d [x.instance for x in src_snapshots]"},{"line_number":766,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_fce7f93d","line":763,"range":{"start_line":753,"start_character":0,"end_line":763,"end_character":68},"updated":"2016-12-22 14:10:00.000000000","message":"This check needs to be done at the API, if the parameter \"preserve_snapshots\" is True","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"eaef5634c4f3540813c39445eb4ebb904415b4f2","unresolved":false,"context_lines":[{"line_number":750,"context_line":""},{"line_number":751,"context_line":"            if compatibility.get(\u0027preserve_snapshots\u0027):"},{"line_number":752,"context_line":""},{"line_number":753,"context_line":"                # Make sure all snapshots are \u0027available\u0027"},{"line_number":754,"context_line":"                if any(x[\u0027status\u0027] !\u003d constants.STATUS_AVAILABLE"},{"line_number":755,"context_line":"                       for x in src_snapshots):"},{"line_number":756,"context_line":"                    msg \u003d _("},{"line_number":757,"context_line":"                        \"All snapshots must have \u0027%(status)s\u0027 status to be \""},{"line_number":758,"context_line":"                        \"migrated by the driver along with share \""},{"line_number":759,"context_line":"                        \"%(share)s.\") % {"},{"line_number":760,"context_line":"                            \u0027share\u0027: share_ref[\u0027id\u0027],"},{"line_number":761,"context_line":"                            \u0027status\u0027: constants.STATUS_AVAILABLE"},{"line_number":762,"context_line":"                        }"},{"line_number":763,"context_line":"                    raise exception.ShareMigrationFailed(reason\u003dmsg)"},{"line_number":764,"context_line":""},{"line_number":765,"context_line":"                src_snap_instances \u003d [x.instance for x in src_snapshots]"},{"line_number":766,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_eaca90a0","line":763,"range":{"start_line":753,"start_character":0,"end_line":763,"end_character":68},"in_reply_to":"da4df55a_fce7f93d","updated":"2016-12-23 20:06:30.000000000","message":"not really, even if preserve_snapshots is not specified, and driver supports it, it will do. But it cannot do it while statuses are not available, and we can only determine that the driver can do it here.","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c68a2143eb572062b60fc3c2036b64aefc559368","unresolved":false,"context_lines":[{"line_number":775,"context_line":"                        self.db.share_snapshot_instance_create("},{"line_number":776,"context_line":"                            context, snap_instance[\u0027snapshot_id\u0027],"},{"line_number":777,"context_line":"                            snap_instance_data))"},{"line_number":778,"context_line":"                    self.db.share_snapshot_instance_update("},{"line_number":779,"context_line":"                        context, snap_instance[\u0027id\u0027],"},{"line_number":780,"context_line":"                        {\u0027status\u0027: constants.STATUS_MIGRATING})"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"            else:"},{"line_number":783,"context_line":"                if src_snapshots:"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_fc49b9d1","line":780,"range":{"start_line":778,"start_character":0,"end_line":780,"end_character":63},"updated":"2016-12-22 14:10:00.000000000","message":"It is safe to do this in the API, that way, you can protect the snapshots from being accidentally deleted, used for share creation, and perhaps mounted.","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"eaef5634c4f3540813c39445eb4ebb904415b4f2","unresolved":false,"context_lines":[{"line_number":775,"context_line":"                        self.db.share_snapshot_instance_create("},{"line_number":776,"context_line":"                            context, snap_instance[\u0027snapshot_id\u0027],"},{"line_number":777,"context_line":"                            snap_instance_data))"},{"line_number":778,"context_line":"                    self.db.share_snapshot_instance_update("},{"line_number":779,"context_line":"                        context, snap_instance[\u0027id\u0027],"},{"line_number":780,"context_line":"                        {\u0027status\u0027: constants.STATUS_MIGRATING})"},{"line_number":781,"context_line":""},{"line_number":782,"context_line":"            else:"},{"line_number":783,"context_line":"                if src_snapshots:"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_4a3b9c38","line":780,"range":{"start_line":778,"start_character":0,"end_line":780,"end_character":63},"in_reply_to":"da4df55a_fc49b9d1","updated":"2016-12-23 20:06:30.000000000","message":"share status will already be migrating, so it will prevent snapshots from being deleted, etc. For share creation (create_share_from_snapshot) there is in fact no conflict.","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c68a2143eb572062b60fc3c2036b64aefc559368","unresolved":false,"context_lines":[{"line_number":925,"context_line":""},{"line_number":926,"context_line":"        snapshot_mappings \u003d {}"},{"line_number":927,"context_line":"        src_snap_instances \u003d []"},{"line_number":928,"context_line":"        if len(dest_snap_instances) \u003e 0:"},{"line_number":929,"context_line":"            src_snap_instances \u003d ("},{"line_number":930,"context_line":"                self.db.share_snapshot_instance_get_all_with_filters("},{"line_number":931,"context_line":"                    context,"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_5cf3a573","line":928,"range":{"start_line":928,"start_character":11,"end_line":928,"end_character":39},"updated":"2016-12-22 14:10:00.000000000","message":"dest_snap_instances \n\n\nbut why this check? Why not just \n\n          snapshot_mappings \u003d {}\n          src_snap_instances \u003d []\n           src_snap_instances \u003d (\n                self.db.share_snapshot_instance_get_all_with_filters(\n                    context,\n                    {\u0027share_instance_ids\u0027: [src_share_instance[\u0027id\u0027]]}))\n            for snap in src_snap_instances:\n                dest_snap_instance \u003d next(\n                    x for x in dest_snap_instances\n                    if snap[\u0027snapshot_id\u0027] \u003d\u003d x[\u0027snapshot_id\u0027])\n                snapshot_mappings[snap[\u0027id\u0027]] \u003d dest_snap_instance","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"eaef5634c4f3540813c39445eb4ebb904415b4f2","unresolved":false,"context_lines":[{"line_number":925,"context_line":""},{"line_number":926,"context_line":"        snapshot_mappings \u003d {}"},{"line_number":927,"context_line":"        src_snap_instances \u003d []"},{"line_number":928,"context_line":"        if len(dest_snap_instances) \u003e 0:"},{"line_number":929,"context_line":"            src_snap_instances \u003d ("},{"line_number":930,"context_line":"                self.db.share_snapshot_instance_get_all_with_filters("},{"line_number":931,"context_line":"                    context,"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_0aeb54b1","line":928,"range":{"start_line":928,"start_character":11,"end_line":928,"end_character":39},"in_reply_to":"da4df55a_5cf3a573","updated":"2016-12-23 20:06:30.000000000","message":"this way it will not run any db query if there are not destination snapshots, which are determined in migration_start.","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c68a2143eb572062b60fc3c2036b64aefc559368","unresolved":false,"context_lines":[{"line_number":945,"context_line":"                context,"},{"line_number":946,"context_line":"                {\u0027share_instance_ids\u0027: [src_share_instance_id]})"},{"line_number":947,"context_line":"        )"},{"line_number":948,"context_line":"        for snap in snap_instances:"},{"line_number":949,"context_line":"            if snap[\u0027status\u0027] \u003d\u003d constants.STATUS_MIGRATING:"},{"line_number":950,"context_line":"                self.db.share_snapshot_instance_update("},{"line_number":951,"context_line":"                    context, snap[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_074c666f","line":948,"range":{"start_line":948,"start_character":12,"end_line":948,"end_character":16},"updated":"2016-12-22 14:10:00.000000000","message":"instance","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"eaef5634c4f3540813c39445eb4ebb904415b4f2","unresolved":false,"context_lines":[{"line_number":945,"context_line":"                context,"},{"line_number":946,"context_line":"                {\u0027share_instance_ids\u0027: [src_share_instance_id]})"},{"line_number":947,"context_line":"        )"},{"line_number":948,"context_line":"        for snap in snap_instances:"},{"line_number":949,"context_line":"            if snap[\u0027status\u0027] \u003d\u003d constants.STATUS_MIGRATING:"},{"line_number":950,"context_line":"                self.db.share_snapshot_instance_update("},{"line_number":951,"context_line":"                    context, snap[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_8ad744ec","line":948,"range":{"start_line":948,"start_character":12,"end_line":948,"end_character":16},"in_reply_to":"da4df55a_074c666f","updated":"2016-12-23 20:06:30.000000000","message":"Done","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c68a2143eb572062b60fc3c2036b64aefc559368","unresolved":false,"context_lines":[{"line_number":1112,"context_line":"        data_updates \u003d self.driver.migration_complete("},{"line_number":1113,"context_line":"            context, src_share_instance, dest_share_instance,"},{"line_number":1114,"context_line":"            src_snap_instances, snapshot_mappings, share_server,"},{"line_number":1115,"context_line":"            dest_share_server)"},{"line_number":1116,"context_line":""},{"line_number":1117,"context_line":"        if data_updates and data_updates.get(\u0027export_locations\u0027):"},{"line_number":1118,"context_line":"            self.db.share_export_locations_update("}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_a7147af5","line":1115,"range":{"start_line":1115,"start_character":29,"end_line":1115,"end_character":30},"updated":"2016-12-22 14:10:00.000000000","message":"or {}","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"eaef5634c4f3540813c39445eb4ebb904415b4f2","unresolved":false,"context_lines":[{"line_number":1112,"context_line":"        data_updates \u003d self.driver.migration_complete("},{"line_number":1113,"context_line":"            context, src_share_instance, dest_share_instance,"},{"line_number":1114,"context_line":"            src_snap_instances, snapshot_mappings, share_server,"},{"line_number":1115,"context_line":"            dest_share_server)"},{"line_number":1116,"context_line":""},{"line_number":1117,"context_line":"        if data_updates and data_updates.get(\u0027export_locations\u0027):"},{"line_number":1118,"context_line":"            self.db.share_export_locations_update("}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_a85b2f86","line":1115,"range":{"start_line":1115,"start_character":29,"end_line":1115,"end_character":30},"in_reply_to":"da4df55a_a7147af5","updated":"2016-12-23 20:06:30.000000000","message":"Done","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c68a2143eb572062b60fc3c2036b64aefc559368","unresolved":false,"context_lines":[{"line_number":1114,"context_line":"            src_snap_instances, snapshot_mappings, share_server,"},{"line_number":1115,"context_line":"            dest_share_server)"},{"line_number":1116,"context_line":""},{"line_number":1117,"context_line":"        if data_updates and data_updates.get(\u0027export_locations\u0027):"},{"line_number":1118,"context_line":"            self.db.share_export_locations_update("},{"line_number":1119,"context_line":"                context, dest_share_instance[\u0027id\u0027],"},{"line_number":1120,"context_line":"                data_updates[\u0027export_locations\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_6731b2a2","line":1117,"range":{"start_line":1117,"start_character":11,"end_line":1117,"end_character":28},"updated":"2016-12-22 14:10:00.000000000","message":"remove if you set the previous line to \n\n or {}","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"eaef5634c4f3540813c39445eb4ebb904415b4f2","unresolved":false,"context_lines":[{"line_number":1114,"context_line":"            src_snap_instances, snapshot_mappings, share_server,"},{"line_number":1115,"context_line":"            dest_share_server)"},{"line_number":1116,"context_line":""},{"line_number":1117,"context_line":"        if data_updates and data_updates.get(\u0027export_locations\u0027):"},{"line_number":1118,"context_line":"            self.db.share_export_locations_update("},{"line_number":1119,"context_line":"                context, dest_share_instance[\u0027id\u0027],"},{"line_number":1120,"context_line":"                data_updates[\u0027export_locations\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_68c86723","line":1117,"range":{"start_line":1117,"start_character":11,"end_line":1117,"end_character":28},"in_reply_to":"da4df55a_6731b2a2","updated":"2016-12-23 20:06:30.000000000","message":"Done","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c68a2143eb572062b60fc3c2036b64aefc559368","unresolved":false,"context_lines":[{"line_number":1119,"context_line":"                context, dest_share_instance[\u0027id\u0027],"},{"line_number":1120,"context_line":"                data_updates[\u0027export_locations\u0027])"},{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":"        if data_updates and data_updates.get(\u0027snapshot_updates\u0027):"},{"line_number":1123,"context_line":"            for snap_id, data in data_updates[\u0027snapshot_updates\u0027].items():"},{"line_number":1124,"context_line":"                data[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"},{"line_number":1125,"context_line":"                data[\u0027progress\u0027] \u003d \u0027100%\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_071b861c","line":1122,"range":{"start_line":1122,"start_character":11,"end_line":1122,"end_character":27},"updated":"2016-12-22 14:10:00.000000000","message":"same","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"eaef5634c4f3540813c39445eb4ebb904415b4f2","unresolved":false,"context_lines":[{"line_number":1119,"context_line":"                context, dest_share_instance[\u0027id\u0027],"},{"line_number":1120,"context_line":"                data_updates[\u0027export_locations\u0027])"},{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":"        if data_updates and data_updates.get(\u0027snapshot_updates\u0027):"},{"line_number":1123,"context_line":"            for snap_id, data in data_updates[\u0027snapshot_updates\u0027].items():"},{"line_number":1124,"context_line":"                data[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"},{"line_number":1125,"context_line":"                data[\u0027progress\u0027] \u003d \u0027100%\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_e8dc57e6","line":1122,"range":{"start_line":1122,"start_character":11,"end_line":1122,"end_character":27},"in_reply_to":"da4df55a_071b861c","updated":"2016-12-23 20:06:30.000000000","message":"Done","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c68a2143eb572062b60fc3c2036b64aefc559368","unresolved":false,"context_lines":[{"line_number":1120,"context_line":"                data_updates[\u0027export_locations\u0027])"},{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":"        if data_updates and data_updates.get(\u0027snapshot_updates\u0027):"},{"line_number":1123,"context_line":"            for snap_id, data in data_updates[\u0027snapshot_updates\u0027].items():"},{"line_number":1124,"context_line":"                data[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"},{"line_number":1125,"context_line":"                data[\u0027progress\u0027] \u003d \u0027100%\u0027"},{"line_number":1126,"context_line":"                self.db.share_snapshot_instance_update(context, snap_id, data)"},{"line_number":1127,"context_line":""},{"line_number":1128,"context_line":"        helper \u003d migration.ShareMigrationHelper(context, self.db, share_ref)"},{"line_number":1129,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_e7792231","line":1126,"range":{"start_line":1123,"start_character":0,"end_line":1126,"end_character":78},"updated":"2016-12-22 14:10:00.000000000","message":"What if the driver has nothing to update? Should it still return the list of snapshots?","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"eaef5634c4f3540813c39445eb4ebb904415b4f2","unresolved":false,"context_lines":[{"line_number":1120,"context_line":"                data_updates[\u0027export_locations\u0027])"},{"line_number":1121,"context_line":""},{"line_number":1122,"context_line":"        if data_updates and data_updates.get(\u0027snapshot_updates\u0027):"},{"line_number":1123,"context_line":"            for snap_id, data in data_updates[\u0027snapshot_updates\u0027].items():"},{"line_number":1124,"context_line":"                data[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"},{"line_number":1125,"context_line":"                data[\u0027progress\u0027] \u003d \u0027100%\u0027"},{"line_number":1126,"context_line":"                self.db.share_snapshot_instance_update(context, snap_id, data)"},{"line_number":1127,"context_line":""},{"line_number":1128,"context_line":"        helper \u003d migration.ShareMigrationHelper(context, self.db, share_ref)"},{"line_number":1129,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_cba94de1","line":1126,"range":{"start_line":1123,"start_character":0,"end_line":1126,"end_character":78},"in_reply_to":"da4df55a_e7792231","updated":"2016-12-23 20:06:30.000000000","message":"Done","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":760,"context_line":""},{"line_number":761,"context_line":"                src_snap_instances \u003d [x.instance for x in src_snapshots]"},{"line_number":762,"context_line":""},{"line_number":763,"context_line":"                snap_instance_data \u003d {"},{"line_number":764,"context_line":"                    \u0027status\u0027: constants.STATUS_MIGRATING_TO,"},{"line_number":765,"context_line":"                    \u0027progress\u0027: \u00270%\u0027,"},{"line_number":766,"context_line":"                    \u0027share_instance_id\u0027: dest_share_instance[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_cd6eb395","line":763,"range":{"start_line":763,"start_character":16,"end_line":763,"end_character":34},"updated":"2017-01-16 16:45:05.000000000","message":"dest_snap_instance_data","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":760,"context_line":""},{"line_number":761,"context_line":"                src_snap_instances \u003d [x.instance for x in src_snapshots]"},{"line_number":762,"context_line":""},{"line_number":763,"context_line":"                snap_instance_data \u003d {"},{"line_number":764,"context_line":"                    \u0027status\u0027: constants.STATUS_MIGRATING_TO,"},{"line_number":765,"context_line":"                    \u0027progress\u0027: \u00270%\u0027,"},{"line_number":766,"context_line":"                    \u0027share_instance_id\u0027: dest_share_instance[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_98214850","line":763,"range":{"start_line":763,"start_character":16,"end_line":763,"end_character":34},"in_reply_to":"7a3c09a3_cd6eb395","updated":"2017-01-16 17:55:37.000000000","message":"Done","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":1118,"context_line":"        snapshot_updates \u003d data_updates.get(\u0027snapshot_updates\u0027) or {}"},{"line_number":1119,"context_line":"        for src_snap_ins, dest_snap_ins in snapshot_mappings.items():"},{"line_number":1120,"context_line":"            model_update \u003d snapshot_updates.get(dest_snap_ins[\u0027id\u0027]) or {}"},{"line_number":1121,"context_line":"            model_update[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"},{"line_number":1122,"context_line":"            model_update[\u0027progress\u0027] \u003d \u0027100%\u0027"},{"line_number":1123,"context_line":"            self.db.share_snapshot_instance_update("},{"line_number":1124,"context_line":"                context, dest_snap_ins[\u0027id\u0027], model_update)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_cdc6b348","line":1121,"range":{"start_line":1121,"start_character":12,"end_line":1121,"end_character":63},"updated":"2017-01-16 16:45:05.000000000","message":"also check for the status update from the driver","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":1118,"context_line":"        snapshot_updates \u003d data_updates.get(\u0027snapshot_updates\u0027) or {}"},{"line_number":1119,"context_line":"        for src_snap_ins, dest_snap_ins in snapshot_mappings.items():"},{"line_number":1120,"context_line":"            model_update \u003d snapshot_updates.get(dest_snap_ins[\u0027id\u0027]) or {}"},{"line_number":1121,"context_line":"            model_update[\u0027status\u0027] \u003d constants.STATUS_AVAILABLE"},{"line_number":1122,"context_line":"            model_update[\u0027progress\u0027] \u003d \u0027100%\u0027"},{"line_number":1123,"context_line":"            self.db.share_snapshot_instance_update("},{"line_number":1124,"context_line":"                context, dest_snap_ins[\u0027id\u0027], model_update)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_73459d15","line":1121,"range":{"start_line":1121,"start_character":12,"end_line":1121,"end_character":63},"in_reply_to":"7a3c09a3_cdc6b348","updated":"2017-01-16 17:55:37.000000000","message":"as discussed in IRC, this step of migration (_migration_complete_driver) is not cleaned up, so whenever something bad happens an exception should be raised to warn the administrator. A driver should never return anything other than success if not raising an exception here.","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":1158,"context_line":"        snap_instances \u003d self.db.share_snapshot_instance_get_all_with_filters("},{"line_number":1159,"context_line":"            context, {\u0027share_instance_ids\u0027: [instance_id]})"},{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":"        for snap in snap_instances:"},{"line_number":1162,"context_line":"            self.db.share_snapshot_instance_delete(context, snap[\u0027id\u0027])"},{"line_number":1163,"context_line":""},{"line_number":1164,"context_line":"        self.db.share_instance_delete(context, instance_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_0dd8bb1c","line":1161,"range":{"start_line":1161,"start_character":12,"end_line":1161,"end_character":16},"updated":"2017-01-16 16:45:05.000000000","message":"instance","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":1158,"context_line":"        snap_instances \u003d self.db.share_snapshot_instance_get_all_with_filters("},{"line_number":1159,"context_line":"            context, {\u0027share_instance_ids\u0027: [instance_id]})"},{"line_number":1160,"context_line":""},{"line_number":1161,"context_line":"        for snap in snap_instances:"},{"line_number":1162,"context_line":"            self.db.share_snapshot_instance_delete(context, snap[\u0027id\u0027])"},{"line_number":1163,"context_line":""},{"line_number":1164,"context_line":"        self.db.share_instance_delete(context, instance_id)"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_f88facc9","line":1161,"range":{"start_line":1161,"start_character":12,"end_line":1161,"end_character":16},"in_reply_to":"7a3c09a3_0dd8bb1c","updated":"2017-01-16 17:55:37.000000000","message":"Done","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"b1e6a2b9ca22083371139c0ae1ec3184e4e988c7","unresolved":false,"context_lines":[{"line_number":744,"context_line":"            src_snapshots \u003d self.db.share_snapshot_get_all_for_share("},{"line_number":745,"context_line":"                context, share_ref[\u0027id\u0027])"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"            if compatibility.get(\u0027preserve_snapshots\u0027):"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"                # Make sure all snapshots are \u0027available\u0027"},{"line_number":750,"context_line":"                if any(x[\u0027status\u0027] !\u003d constants.STATUS_AVAILABLE"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_6abd57d7","line":747,"updated":"2017-01-17 21:25:57.000000000","message":"if not preserve_snaphots:  it\u0027d be nice if when we are not preserving snapshots we don\u0027t fail because of they exist or have a bad status. Can\u0027t we just migrate and then clobber the old ones?","commit_id":"7e99f4f1ee11c9e091a6d6933357b7c2a2098407"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"995a4144fe55fbae21d644193656295a64517c81","unresolved":false,"context_lines":[{"line_number":744,"context_line":"            src_snapshots \u003d self.db.share_snapshot_get_all_for_share("},{"line_number":745,"context_line":"                context, share_ref[\u0027id\u0027])"},{"line_number":746,"context_line":""},{"line_number":747,"context_line":"            if compatibility.get(\u0027preserve_snapshots\u0027):"},{"line_number":748,"context_line":""},{"line_number":749,"context_line":"                # Make sure all snapshots are \u0027available\u0027"},{"line_number":750,"context_line":"                if any(x[\u0027status\u0027] !\u003d constants.STATUS_AVAILABLE"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_40813efa","line":747,"in_reply_to":"7a3c09a3_6abd57d7","updated":"2017-01-18 11:36:42.000000000","message":"This behavior could probably be unexpected by the user and lead to loss of data. I believe it is better to error out so the user takes the proper decision such as deleting the snapshots in order to migrate.","commit_id":"7e99f4f1ee11c9e091a6d6933357b7c2a2098407"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"b1e6a2b9ca22083371139c0ae1ec3184e4e988c7","unresolved":false,"context_lines":[{"line_number":990,"context_line":"                    msg \u003d _(\"Migration for share %s could not be \""},{"line_number":991,"context_line":"                            \"performed because host-assisted migration is not \""},{"line_number":992,"context_line":"                            \"allowed when share must remain writable, \""},{"line_number":993,"context_line":"                            \"preserve snapshots, file metadata or be performed\""},{"line_number":994,"context_line":"                            \" nondisruptively.\") % share_id"},{"line_number":995,"context_line":""},{"line_number":996,"context_line":"                    raise exception.ShareMigrationFailed(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_ca59eb36","line":993,"range":{"start_line":993,"start_character":47,"end_line":993,"end_character":53},"updated":"2017-01-17 21:25:57.000000000","message":"preserve snapshots and/or metadata","commit_id":"7e99f4f1ee11c9e091a6d6933357b7c2a2098407"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"995a4144fe55fbae21d644193656295a64517c81","unresolved":false,"context_lines":[{"line_number":990,"context_line":"                    msg \u003d _(\"Migration for share %s could not be \""},{"line_number":991,"context_line":"                            \"performed because host-assisted migration is not \""},{"line_number":992,"context_line":"                            \"allowed when share must remain writable, \""},{"line_number":993,"context_line":"                            \"preserve snapshots, file metadata or be performed\""},{"line_number":994,"context_line":"                            \" nondisruptively.\") % share_id"},{"line_number":995,"context_line":""},{"line_number":996,"context_line":"                    raise exception.ShareMigrationFailed(reason\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_e0c22a52","line":993,"range":{"start_line":993,"start_character":47,"end_line":993,"end_character":53},"in_reply_to":"7a3c09a3_ca59eb36","updated":"2017-01-18 11:36:42.000000000","message":"Done","commit_id":"7e99f4f1ee11c9e091a6d6933357b7c2a2098407"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"bd5f1cbb947239e0b1e8b46fee383221e4662648","unresolved":false,"context_lines":[{"line_number":985,"context_line":"        try:"},{"line_number":986,"context_line":""},{"line_number":987,"context_line":"            if not success:"},{"line_number":988,"context_line":"                if (writable or preserve_metadata or nondisruptive or"},{"line_number":989,"context_line":"                        preserve_snapshots):"},{"line_number":990,"context_line":"                    msg \u003d _(\"Migration for share %s could not be \""},{"line_number":991,"context_line":"                            \"performed because host-assisted migration is not \""},{"line_number":992,"context_line":"                            \"allowed when share must remain writable, \""},{"line_number":993,"context_line":"                            \"preserve snapshots and/or file metadata or be \""},{"line_number":994,"context_line":"                            \"performed nondisruptively.\") % share_id"},{"line_number":995,"context_line":""},{"line_number":996,"context_line":"                    raise exception.ShareMigrationFailed(reason\u003dmsg)"},{"line_number":997,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_df50840d","line":994,"range":{"start_line":988,"start_character":15,"end_line":994,"end_character":68},"updated":"2017-01-18 21:54:25.000000000","message":"We could provide different messages here depending on what was asked for. I\u0027m thinking of 1 error message per boolean, so 4 possible messages. Of course if the user set multiple booleans to true then they\u0027d only get an error message about the first one. Still that seems better than giving them this big error message.","commit_id":"f5981917ef74595c4654f22e487ce2e9043d8831"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bdcdc9b4032d86f2cd4a54d564d5f356762c0220","unresolved":false,"context_lines":[{"line_number":985,"context_line":"        try:"},{"line_number":986,"context_line":""},{"line_number":987,"context_line":"            if not success:"},{"line_number":988,"context_line":"                if (writable or preserve_metadata or nondisruptive or"},{"line_number":989,"context_line":"                        preserve_snapshots):"},{"line_number":990,"context_line":"                    msg \u003d _(\"Migration for share %s could not be \""},{"line_number":991,"context_line":"                            \"performed because host-assisted migration is not \""},{"line_number":992,"context_line":"                            \"allowed when share must remain writable, \""},{"line_number":993,"context_line":"                            \"preserve snapshots and/or file metadata or be \""},{"line_number":994,"context_line":"                            \"performed nondisruptively.\") % share_id"},{"line_number":995,"context_line":""},{"line_number":996,"context_line":"                    raise exception.ShareMigrationFailed(reason\u003dmsg)"},{"line_number":997,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"5a3905b3_e7ef6bae","line":994,"range":{"start_line":988,"start_character":15,"end_line":994,"end_character":68},"in_reply_to":"7a3c09a3_df50840d","updated":"2017-01-19 12:47:23.000000000","message":"this is saved to the log. If the user sees this message but is uncertain of which parameters are the driver-assisted and cannot be used for host-assisted, then I think a single message is more effective than the user repeatedly trying 4 failing requests until figuring out what parameters not to use.","commit_id":"f5981917ef74595c4654f22e487ce2e9043d8831"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"acea9139fd44d6aa77e9bc7cbddb5c0f4cf75d27","unresolved":false,"context_lines":[{"line_number":1201,"context_line":"                            \" share %s.\") % share_ref[\u0027id\u0027]"},{"line_number":1202,"context_line":"                    LOG.exception(msg)"},{"line_number":1203,"context_line":""},{"line_number":1204,"context_line":"                    # NOTE(ganso): If driver fails during migration-complete,"},{"line_number":1205,"context_line":"                    # all instances are set to error and it is up to the admin"},{"line_number":1206,"context_line":"                    # to fix the problem to either complete migration"},{"line_number":1207,"context_line":"                    # manually or clean it up. At this moment, data"},{"line_number":1208,"context_line":"                    # preservation at the source backend cannot be"},{"line_number":1209,"context_line":"                    # guaranteed."},{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":"                    self._restore_migrating_snapshots_status("},{"line_number":1212,"context_line":"                        context, src_share_instance[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_be254eac","line":1209,"range":{"start_line":1204,"start_character":0,"end_line":1209,"end_character":33},"updated":"2017-01-19 21:55:38.000000000","message":"can we log this message please?\n\n\"Failed to complete driver assisted migration. Since we cannot determine if the source was left in a consistent state, the source share will be set to error.\"","commit_id":"3b8fafde89aa8ac6b2b532ab576ba5ec9b093664"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"acea9139fd44d6aa77e9bc7cbddb5c0f4cf75d27","unresolved":false,"context_lines":[{"line_number":1254,"context_line":""},{"line_number":1255,"context_line":"        update \u003d share_api.get_share_attributes_from_share_type(share_type)"},{"line_number":1256,"context_line":""},{"line_number":1257,"context_line":"        self.db.share_update(context, share_id, update)"},{"line_number":1258,"context_line":""},{"line_number":1259,"context_line":"    def _migration_complete_host_assisted(self, context, share_ref,"},{"line_number":1260,"context_line":"                                          src_instance_id, dest_instance_id):"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a3905b3_1e4ca26f","line":1257,"range":{"start_line":1257,"start_character":0,"end_line":1257,"end_character":55},"updated":"2017-01-19 21:55:38.000000000","message":"We added positive and negative tests for this. Works as intended/coded.","commit_id":"3b8fafde89aa8ac6b2b532ab576ba5ec9b093664"}],"manila/share/rpcapi.py":[{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"b32e846a41f867bfad102811504b4c316bcfede4","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            update migration_cancel(), migration_complete() and"},{"line_number":65,"context_line":"            migration_get_progress method signature, rename"},{"line_number":66,"context_line":"            migration_get_info() to connection_get_info()"},{"line_number":67,"context_line":"        1.13 - Updated migration_start() method with new parameters"},{"line_number":68,"context_line":"    \"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_0b75df30","line":67,"updated":"2016-12-05 13:25:48.000000000","message":"preserve_snapshots","commit_id":"979104126038abb41207a76e4537ed2833284b62"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"64bb0aee3742dbcb6e6acf071d2800724f14fca6","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            update migration_cancel(), migration_complete() and"},{"line_number":65,"context_line":"            migration_get_progress method signature, rename"},{"line_number":66,"context_line":"            migration_get_info() to connection_get_info()"},{"line_number":67,"context_line":"        1.13 - Updated migration_start() method with new parameters"},{"line_number":68,"context_line":"    \"\"\""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    BASE_RPC_API_VERSION \u003d \u00271.0\u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a71b18c_9cbf69a9","line":67,"in_reply_to":"3a71b18c_0b75df30","updated":"2016-12-05 18:19:50.000000000","message":"Done","commit_id":"979104126038abb41207a76e4537ed2833284b62"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c68a2143eb572062b60fc3c2036b64aefc559368","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            update migration_cancel(), migration_complete() and"},{"line_number":65,"context_line":"            migration_get_progress method signature, rename"},{"line_number":66,"context_line":"            migration_get_info() to connection_get_info()"},{"line_number":67,"context_line":"        1.13 - Updated migration_start() method with preserve_snapshots new"},{"line_number":68,"context_line":"            parameter"},{"line_number":69,"context_line":"    \"\"\""},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_87d136d0","line":67,"range":{"start_line":67,"start_character":52,"end_line":67,"end_character":53},"updated":"2016-12-22 14:10:00.000000000","message":"nit: with new parameter \"preserve_snapshots\"","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"eaef5634c4f3540813c39445eb4ebb904415b4f2","unresolved":false,"context_lines":[{"line_number":64,"context_line":"            update migration_cancel(), migration_complete() and"},{"line_number":65,"context_line":"            migration_get_progress method signature, rename"},{"line_number":66,"context_line":"            migration_get_info() to connection_get_info()"},{"line_number":67,"context_line":"        1.13 - Updated migration_start() method with preserve_snapshots new"},{"line_number":68,"context_line":"            parameter"},{"line_number":69,"context_line":"    \"\"\""},{"line_number":70,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_0a0d1437","line":67,"range":{"start_line":67,"start_character":52,"end_line":67,"end_character":53},"in_reply_to":"da4df55a_87d136d0","updated":"2016-12-23 20:06:30.000000000","message":"Done","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"}],"manila/tests/share/drivers/dummy.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c1264eb26447c205a4d6ad1cf4e58986b7b15111","unresolved":false,"context_lines":[{"line_number":470,"context_line":"            \u0027compatible\u0027: True,"},{"line_number":471,"context_line":"            \u0027writable\u0027: True,"},{"line_number":472,"context_line":"            \u0027preserve_metadata\u0027: True,"},{"line_number":473,"context_line":"            \u0027nondisruptive\u0027: True,"},{"line_number":474,"context_line":"            \u0027preserve_snapshots\u0027: True,"},{"line_number":475,"context_line":"        }"},{"line_number":476,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_0defdbb0","line":473,"range":{"start_line":473,"start_character":29,"end_line":473,"end_character":33},"updated":"2017-01-16 16:26:11.000000000","message":"should change this to false on next patch","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":470,"context_line":"            \u0027compatible\u0027: True,"},{"line_number":471,"context_line":"            \u0027writable\u0027: True,"},{"line_number":472,"context_line":"            \u0027preserve_metadata\u0027: True,"},{"line_number":473,"context_line":"            \u0027nondisruptive\u0027: True,"},{"line_number":474,"context_line":"            \u0027preserve_snapshots\u0027: True,"},{"line_number":475,"context_line":"        }"},{"line_number":476,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_edfd2f3b","line":473,"range":{"start_line":473,"start_character":29,"end_line":473,"end_character":33},"in_reply_to":"7a3c09a3_0defdbb0","updated":"2017-01-16 16:45:05.000000000","message":"why?","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":470,"context_line":"            \u0027compatible\u0027: True,"},{"line_number":471,"context_line":"            \u0027writable\u0027: True,"},{"line_number":472,"context_line":"            \u0027preserve_metadata\u0027: True,"},{"line_number":473,"context_line":"            \u0027nondisruptive\u0027: True,"},{"line_number":474,"context_line":"            \u0027preserve_snapshots\u0027: True,"},{"line_number":475,"context_line":"        }"},{"line_number":476,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_d8abd01b","line":473,"range":{"start_line":473,"start_character":29,"end_line":473,"end_character":33},"in_reply_to":"7a3c09a3_edfd2f3b","updated":"2017-01-16 17:55:37.000000000","message":"it currently changes the export location. If you write a test that validates that if nondisruptive\u003dTrue the export location is not change, then this driver would fail.","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"bd5f1cbb947239e0b1e8b46fee383221e4662648","unresolved":false,"context_lines":[{"line_number":473,"context_line":"            \"id\": replica_snapshot[\"id\"], \"status\": constants.STATUS_AVAILABLE}"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"    @slow_me_down"},{"line_number":476,"context_line":"    def migration_check_compatibility("},{"line_number":477,"context_line":"            self, context, source_share, destination_share,"},{"line_number":478,"context_line":"            share_server\u003dNone, destination_share_server\u003dNone):"},{"line_number":479,"context_line":"        \"\"\"Is called to test compatibility with destination backend.\"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_9f519cdb","line":476,"range":{"start_line":476,"start_character":8,"end_line":476,"end_character":36},"updated":"2017-01-18 21:54:25.000000000","message":"Don\u0027t we need to verify that both sides of the migration are using the dummy driver? I can see problems here if you try to migrate from dummy to something real or vice/versa.","commit_id":"f5981917ef74595c4654f22e487ce2e9043d8831"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bdcdc9b4032d86f2cd4a54d564d5f356762c0220","unresolved":false,"context_lines":[{"line_number":473,"context_line":"            \"id\": replica_snapshot[\"id\"], \"status\": constants.STATUS_AVAILABLE}"},{"line_number":474,"context_line":""},{"line_number":475,"context_line":"    @slow_me_down"},{"line_number":476,"context_line":"    def migration_check_compatibility("},{"line_number":477,"context_line":"            self, context, source_share, destination_share,"},{"line_number":478,"context_line":"            share_server\u003dNone, destination_share_server\u003dNone):"},{"line_number":479,"context_line":"        \"\"\"Is called to test compatibility with destination backend.\"\"\""}],"source_content_type":"text/x-python","patch_set":23,"id":"5a3905b3_c74eefc0","line":476,"range":{"start_line":476,"start_character":8,"end_line":476,"end_character":36},"in_reply_to":"7a3c09a3_9f519cdb","updated":"2017-01-19 12:47:23.000000000","message":"Will fix","commit_id":"f5981917ef74595c4654f22e487ce2e9043d8831"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"bd5f1cbb947239e0b1e8b46fee383221e4662648","unresolved":false,"context_lines":[{"line_number":481,"context_line":"            \u0027compatible\u0027: True,"},{"line_number":482,"context_line":"            \u0027writable\u0027: True,"},{"line_number":483,"context_line":"            \u0027preserve_metadata\u0027: True,"},{"line_number":484,"context_line":"            \u0027nondisruptive\u0027: False,"},{"line_number":485,"context_line":"            \u0027preserve_snapshots\u0027: True,"},{"line_number":486,"context_line":"        }"},{"line_number":487,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"7a3c09a3_3fdc2874","line":484,"range":{"start_line":484,"start_character":29,"end_line":484,"end_character":35},"updated":"2017-01-18 21:54:25.000000000","message":"why false? since it\u0027s dummy it should handle nondisruptive migrations fine.","commit_id":"f5981917ef74595c4654f22e487ce2e9043d8831"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bdcdc9b4032d86f2cd4a54d564d5f356762c0220","unresolved":false,"context_lines":[{"line_number":481,"context_line":"            \u0027compatible\u0027: True,"},{"line_number":482,"context_line":"            \u0027writable\u0027: True,"},{"line_number":483,"context_line":"            \u0027preserve_metadata\u0027: True,"},{"line_number":484,"context_line":"            \u0027nondisruptive\u0027: False,"},{"line_number":485,"context_line":"            \u0027preserve_snapshots\u0027: True,"},{"line_number":486,"context_line":"        }"},{"line_number":487,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"5a3905b3_c777cf00","line":484,"range":{"start_line":484,"start_character":29,"end_line":484,"end_character":35},"in_reply_to":"7a3c09a3_3fdc2874","updated":"2017-01-19 12:47:23.000000000","message":"see previous response to Goutham\u0027s comment. It is currently false because it is not implementing a nondisruptive migration result. Yes it can do, it would need to not update the export location for the migrated instance, it needs to be the same as the source\u0027s. Currently it is different, so if one would write a nondisruptive test, it would fail for this driver.","commit_id":"f5981917ef74595c4654f22e487ce2e9043d8831"}],"manila/tests/share/test_api.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"871683a66718772129a7db2e00aa4c047dd7294f","unresolved":false,"context_lines":[{"line_number":2394,"context_line":"        self.mock_object(share_types, \u0027get_share_type\u0027,"},{"line_number":2395,"context_line":"                         mock.Mock(return_value\u003dfake_type_src))"},{"line_number":2396,"context_line":""},{"line_number":2397,"context_line":"        self.api.migration_start("},{"line_number":2398,"context_line":"            self.context, share, host, False, True, True, True, True,"},{"line_number":2399,"context_line":"            new_share_net_param, new_share_type_param)"},{"line_number":2400,"context_line":""},{"line_number":2401,"context_line":"        db_api.share_update.assert_called_once_with("},{"line_number":2402,"context_line":"            self.context, share[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":18,"id":"7a3c09a3_a5aecd95","line":2399,"range":{"start_line":2397,"start_character":8,"end_line":2399,"end_character":54},"updated":"2017-01-16 22:10:56.000000000","message":"assert that the return value is 200","commit_id":"5fdd18e65397ef83c829cf1cf69cbc9c2e5af81c"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"58ce6dd07c57c0513b5271db75fdebefd2493f58","unresolved":false,"context_lines":[{"line_number":2325,"context_line":"        self.mock_object(share_types, \u0027get_share_type\u0027,"},{"line_number":2326,"context_line":"                         mock.Mock(return_value\u003dfake_type_src))"},{"line_number":2327,"context_line":""},{"line_number":2328,"context_line":"        self.api.migration_start("},{"line_number":2329,"context_line":"            self.context, share, host, False, True, True, True, True,"},{"line_number":2330,"context_line":"            new_share_net_param, new_share_type_param)"},{"line_number":2331,"context_line":""},{"line_number":2332,"context_line":"        db_api.share_update.assert_called_once_with("},{"line_number":2333,"context_line":"            self.context, share[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_6832fc60","line":2330,"range":{"start_line":2328,"start_character":0,"end_line":2330,"end_character":54},"updated":"2017-01-16 22:46:54.000000000","message":"assert that the return value is 200","commit_id":"c4332eb0fe29408b6ea8fbf428c26016b0ee773c"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"e08cdf4b5378d737a89106e1d810c8245dc68fb9","unresolved":false,"context_lines":[{"line_number":2325,"context_line":"        self.mock_object(share_types, \u0027get_share_type\u0027,"},{"line_number":2326,"context_line":"                         mock.Mock(return_value\u003dfake_type_src))"},{"line_number":2327,"context_line":""},{"line_number":2328,"context_line":"        self.api.migration_start("},{"line_number":2329,"context_line":"            self.context, share, host, False, True, True, True, True,"},{"line_number":2330,"context_line":"            new_share_net_param, new_share_type_param)"},{"line_number":2331,"context_line":""},{"line_number":2332,"context_line":"        db_api.share_update.assert_called_once_with("},{"line_number":2333,"context_line":"            self.context, share[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":20,"id":"7a3c09a3_889d680c","line":2330,"range":{"start_line":2328,"start_character":0,"end_line":2330,"end_character":54},"in_reply_to":"7a3c09a3_6832fc60","updated":"2017-01-16 23:04:26.000000000","message":"Done","commit_id":"c4332eb0fe29408b6ea8fbf428c26016b0ee773c"}],"manila/utils.py":[{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"c68a2143eb572062b60fc3c2036b64aefc559368","unresolved":false,"context_lines":[{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    return _decorator"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"def get_bool_from_api_params(key, params, default\u003dFalse, strict\u003dTrue):"},{"line_number":467,"context_line":"    \"\"\"Parse bool value from request params."},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"    HTTPBadRequest will be directly raised either of the cases below:"},{"line_number":470,"context_line":"    1. invalid bool string was found by key(with strict on)."},{"line_number":471,"context_line":"    2. key not found while default value is invalid(with strict on)."},{"line_number":472,"context_line":"    \"\"\""},{"line_number":473,"context_line":"    param \u003d params.get(key, default)"},{"line_number":474,"context_line":"    try:"},{"line_number":475,"context_line":"        param \u003d strutils.bool_from_string(param,"},{"line_number":476,"context_line":"                                          strict\u003dstrict,"},{"line_number":477,"context_line":"                                          default\u003ddefault)"},{"line_number":478,"context_line":"    except ValueError:"},{"line_number":479,"context_line":"        msg \u003d _(\u0027Invalid value %(param)s for %(param_string)s. \u0027"},{"line_number":480,"context_line":"                \u0027Expecting a boolean.\u0027) % {\u0027param\u0027: param,"},{"line_number":481,"context_line":"                                           \u0027param_string\u0027: key}"},{"line_number":482,"context_line":"        raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":483,"context_line":"    return param"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"def check_params_exist(keys, params):"},{"line_number":487,"context_line":"    \"\"\"Validates if keys exist in params."},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    :param keys: List of keys to check"},{"line_number":490,"context_line":"    :param params: Parameters received from REST API"},{"line_number":491,"context_line":"    \"\"\""},{"line_number":492,"context_line":"    for key in keys:"},{"line_number":493,"context_line":"        if key not in params:"},{"line_number":494,"context_line":"            msg \u003d _(\"Must specify \u0027%s\u0027.\") % key"},{"line_number":495,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"def check_params_are_boolean(keys, params, default\u003dFalse):"},{"line_number":499,"context_line":"    \"\"\"Validates if keys in params are boolean."},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    :param keys: List of keys to check"},{"line_number":502,"context_line":"    :param params: Parameters received from REST API"},{"line_number":503,"context_line":"    :param default: default value when it does not exist"},{"line_number":504,"context_line":"    :return: a dictionary with keys and respective retrieved value"},{"line_number":505,"context_line":"    \"\"\""},{"line_number":506,"context_line":"    result \u003d {}"},{"line_number":507,"context_line":"    for key in keys:"},{"line_number":508,"context_line":"        value \u003d get_bool_from_api_params(key, params, default, strict\u003dTrue)"},{"line_number":509,"context_line":"        result[key] \u003d value"},{"line_number":510,"context_line":"    return result"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"def require_driver_initialized(func):"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_f3aae384","line":510,"range":{"start_line":465,"start_character":0,"end_line":510,"end_character":17},"updated":"2016-12-22 14:10:00.000000000","message":"A better place for this is manila/api/common.py - it\u0027s odd to see webob exceptions in this file..","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"eaef5634c4f3540813c39445eb4ebb904415b4f2","unresolved":false,"context_lines":[{"line_number":462,"context_line":""},{"line_number":463,"context_line":"    return _decorator"},{"line_number":464,"context_line":""},{"line_number":465,"context_line":""},{"line_number":466,"context_line":"def get_bool_from_api_params(key, params, default\u003dFalse, strict\u003dTrue):"},{"line_number":467,"context_line":"    \"\"\"Parse bool value from request params."},{"line_number":468,"context_line":""},{"line_number":469,"context_line":"    HTTPBadRequest will be directly raised either of the cases below:"},{"line_number":470,"context_line":"    1. invalid bool string was found by key(with strict on)."},{"line_number":471,"context_line":"    2. key not found while default value is invalid(with strict on)."},{"line_number":472,"context_line":"    \"\"\""},{"line_number":473,"context_line":"    param \u003d params.get(key, default)"},{"line_number":474,"context_line":"    try:"},{"line_number":475,"context_line":"        param \u003d strutils.bool_from_string(param,"},{"line_number":476,"context_line":"                                          strict\u003dstrict,"},{"line_number":477,"context_line":"                                          default\u003ddefault)"},{"line_number":478,"context_line":"    except ValueError:"},{"line_number":479,"context_line":"        msg \u003d _(\u0027Invalid value %(param)s for %(param_string)s. \u0027"},{"line_number":480,"context_line":"                \u0027Expecting a boolean.\u0027) % {\u0027param\u0027: param,"},{"line_number":481,"context_line":"                                           \u0027param_string\u0027: key}"},{"line_number":482,"context_line":"        raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":483,"context_line":"    return param"},{"line_number":484,"context_line":""},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"def check_params_exist(keys, params):"},{"line_number":487,"context_line":"    \"\"\"Validates if keys exist in params."},{"line_number":488,"context_line":""},{"line_number":489,"context_line":"    :param keys: List of keys to check"},{"line_number":490,"context_line":"    :param params: Parameters received from REST API"},{"line_number":491,"context_line":"    \"\"\""},{"line_number":492,"context_line":"    for key in keys:"},{"line_number":493,"context_line":"        if key not in params:"},{"line_number":494,"context_line":"            msg \u003d _(\"Must specify \u0027%s\u0027.\") % key"},{"line_number":495,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":""},{"line_number":498,"context_line":"def check_params_are_boolean(keys, params, default\u003dFalse):"},{"line_number":499,"context_line":"    \"\"\"Validates if keys in params are boolean."},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    :param keys: List of keys to check"},{"line_number":502,"context_line":"    :param params: Parameters received from REST API"},{"line_number":503,"context_line":"    :param default: default value when it does not exist"},{"line_number":504,"context_line":"    :return: a dictionary with keys and respective retrieved value"},{"line_number":505,"context_line":"    \"\"\""},{"line_number":506,"context_line":"    result \u003d {}"},{"line_number":507,"context_line":"    for key in keys:"},{"line_number":508,"context_line":"        value \u003d get_bool_from_api_params(key, params, default, strict\u003dTrue)"},{"line_number":509,"context_line":"        result[key] \u003d value"},{"line_number":510,"context_line":"    return result"},{"line_number":511,"context_line":""},{"line_number":512,"context_line":""},{"line_number":513,"context_line":"def require_driver_initialized(func):"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_aa9b28c8","line":510,"range":{"start_line":465,"start_character":0,"end_line":510,"end_character":17},"in_reply_to":"da4df55a_f3aae384","updated":"2016-12-23 20:06:30.000000000","message":"get_bool_from_api_params is unrelated to this change, I think another patch to fix this is more appropriate as it will remove the imports from this file as well.","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":491,"context_line":"    \"\"\""},{"line_number":492,"context_line":"    for key in keys:"},{"line_number":493,"context_line":"        if key not in params:"},{"line_number":494,"context_line":"            msg \u003d _(\"Must specify \u0027%s\u0027.\") % key"},{"line_number":495,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_5fac2aa0","line":494,"range":{"start_line":494,"start_character":0,"end_line":494,"end_character":47},"updated":"2017-01-16 16:45:05.000000000","message":"I think it\u0027s better to spell out all mandatory keys in one go, or:\n\n\n if any(set(keys)-set(params):\n    msg \u003d _(\"Must specify all mandatory parameters: %s\" % keys)","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":491,"context_line":"    \"\"\""},{"line_number":492,"context_line":"    for key in keys:"},{"line_number":493,"context_line":"        if key not in params:"},{"line_number":494,"context_line":"            msg \u003d _(\"Must specify \u0027%s\u0027.\") % key"},{"line_number":495,"context_line":"            raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":496,"context_line":""},{"line_number":497,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_58136066","line":494,"range":{"start_line":494,"start_character":0,"end_line":494,"end_character":47},"in_reply_to":"7a3c09a3_5fac2aa0","updated":"2017-01-16 17:55:37.000000000","message":"Done","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"}],"manila_tempest_tests/tests/api/admin/test_migration.py":[{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7d42436d7248292cda118c88599a23c3a409f361","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                variation\u003d\u0027opposite_driver_modes\u0027))"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)"},{"line_number":79,"context_line":"    @base.skip_if_microversion_not_supported(\"2.26\")"},{"line_number":80,"context_line":"    @ddt.data(True, False)"},{"line_number":81,"context_line":"    def test_migration_cancel(self, force_host_assisted):"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a57fde8_44484c2e","line":79,"range":{"start_line":79,"start_character":10,"end_line":79,"end_character":44},"updated":"2017-01-12 10:36:04.000000000","message":"Why removed \"skip_if_microversion_lt\"? Same below.","commit_id":"aa3ba14e4a53b8c88ddf5f4604d7889b549aaeb8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c9597b20a73a87cfa73ffd88a4d3ad17798efe33","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                variation\u003d\u0027opposite_driver_modes\u0027))"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)"},{"line_number":79,"context_line":"    @base.skip_if_microversion_not_supported(\"2.26\")"},{"line_number":80,"context_line":"    @ddt.data(True, False)"},{"line_number":81,"context_line":"    def test_migration_cancel(self, force_host_assisted):"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7a3c09a3_523c7893","line":79,"range":{"start_line":79,"start_character":10,"end_line":79,"end_character":44},"in_reply_to":"9a57fde8_44484c2e","updated":"2017-01-16 15:28:51.000000000","message":"Done","commit_id":"aa3ba14e4a53b8c88ddf5f4604d7889b549aaeb8"}],"manila_tempest_tests/tests/api/base.py":[{"author":{"_account_id":13167,"name":"Yogesh","email":"ykshirsa@netapp.com","username":"yogi1"},"change_message_id":"4672cfd9f53e15978232be680b68b866227de257","unresolved":false,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    @classmethod"},{"line_number":419,"context_line":"    def migrate_share("},{"line_number":420,"context_line":"            cls, share_id, dest_host, wait_for_status, client\u003dNone,"},{"line_number":421,"context_line":"            force_host_assisted_migration\u003dFalse, new_share_network_id\u003dNone,"},{"line_number":422,"context_line":"            new_share_type_id\u003dNone, **kwargs):"},{"line_number":423,"context_line":"        client \u003d client or cls.shares_v2_client"},{"line_number":424,"context_line":"        client.migrate_share("},{"line_number":425,"context_line":"            share_id, dest_host,"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a57fde8_eb06551f","line":422,"range":{"start_line":420,"start_character":12,"end_line":422,"end_character":44},"updated":"2017-01-12 18:44:00.000000000","message":"preserve_snapshots\u003dFalse should be added here as well, so the test can pass True while testing the snapshot case.","commit_id":"aa3ba14e4a53b8c88ddf5f4604d7889b549aaeb8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c9597b20a73a87cfa73ffd88a4d3ad17798efe33","unresolved":false,"context_lines":[{"line_number":417,"context_line":""},{"line_number":418,"context_line":"    @classmethod"},{"line_number":419,"context_line":"    def migrate_share("},{"line_number":420,"context_line":"            cls, share_id, dest_host, wait_for_status, client\u003dNone,"},{"line_number":421,"context_line":"            force_host_assisted_migration\u003dFalse, new_share_network_id\u003dNone,"},{"line_number":422,"context_line":"            new_share_type_id\u003dNone, **kwargs):"},{"line_number":423,"context_line":"        client \u003d client or cls.shares_v2_client"},{"line_number":424,"context_line":"        client.migrate_share("},{"line_number":425,"context_line":"            share_id, dest_host,"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a3c09a3_5983b8cc","line":422,"range":{"start_line":420,"start_character":12,"end_line":422,"end_character":44},"in_reply_to":"9a57fde8_eb06551f","updated":"2017-01-16 15:28:51.000000000","message":"kwargs should do it","commit_id":"aa3ba14e4a53b8c88ddf5f4604d7889b549aaeb8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":431,"context_line":"            share_id, dest_host,"},{"line_number":432,"context_line":"            force_host_assisted_migration\u003dforce_host_assisted_migration,"},{"line_number":433,"context_line":"            new_share_network_id\u003dnew_share_network_id,"},{"line_number":434,"context_line":"            new_share_type_id\u003dnew_share_type_id, **kwargs)"},{"line_number":435,"context_line":"        share \u003d client.wait_for_migration_status("},{"line_number":436,"context_line":"            share_id, dest_host, wait_for_status, **kwargs)"},{"line_number":437,"context_line":"        return share"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_3f083e91","line":434,"range":{"start_line":434,"start_character":49,"end_line":434,"end_character":57},"updated":"2017-01-16 16:45:05.000000000","message":"why? it\u0027s better to send them here when you know all the possible values the other method is expecting.","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":431,"context_line":"            share_id, dest_host,"},{"line_number":432,"context_line":"            force_host_assisted_migration\u003dforce_host_assisted_migration,"},{"line_number":433,"context_line":"            new_share_network_id\u003dnew_share_network_id,"},{"line_number":434,"context_line":"            new_share_type_id\u003dnew_share_type_id, **kwargs)"},{"line_number":435,"context_line":"        share \u003d client.wait_for_migration_status("},{"line_number":436,"context_line":"            share_id, dest_host, wait_for_status, **kwargs)"},{"line_number":437,"context_line":"        return share"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_7324bdae","line":434,"range":{"start_line":434,"start_character":49,"end_line":434,"end_character":57},"in_reply_to":"7a3c09a3_3f083e91","updated":"2017-01-16 17:55:37.000000000","message":"humm I believe it is a valid point now that all the parameters are mandatory.","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"}],"manila_tempest_tests/tests/scenario/test_share_basic_ops.py":[{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"eaef5634c4f3540813c39445eb4ebb904415b4f2","unresolved":false,"context_lines":[{"line_number":253,"context_line":"    @testtools.skipUnless(CONF.share.run_host_assisted_migration_tests or"},{"line_number":254,"context_line":"                          CONF.share.run_driver_assisted_migration_tests,"},{"line_number":255,"context_line":"                          \"Share migration tests are disabled.\")"},{"line_number":256,"context_line":"    @ddt.data(True, False)"},{"line_number":257,"context_line":"    def test_migration_files(self, force_host_assisted):"},{"line_number":258,"context_line":""},{"line_number":259,"context_line":"        if force_host_assisted:"},{"line_number":260,"context_line":"            if not CONF.share.run_host_assisted_migration_tests:"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_c5e13e00","line":257,"range":{"start_line":256,"start_character":1,"end_line":257,"end_character":56},"updated":"2016-12-23 20:06:30.000000000","message":"skip if microversion not supported","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"eaef5634c4f3540813c39445eb4ebb904415b4f2","unresolved":false,"context_lines":[{"line_number":345,"context_line":""},{"line_number":346,"context_line":"        self.share \u003d self.migration_complete(self.share[\u0027id\u0027], dest_pool)"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        if utils.is_microversion_lt(CONF.share.max_api_microversion, \"2.9\"):"},{"line_number":349,"context_line":"            new_exports \u003d self.share[\u0027export_locations\u0027]"},{"line_number":350,"context_line":"            self.assertNotEmpty(new_exports)"},{"line_number":351,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"da4df55a_a5ac3aa1","line":348,"range":{"start_line":348,"start_character":6,"end_line":348,"end_character":76},"updated":"2016-12-23 20:06:30.000000000","message":"remove","commit_id":"c6d7a37aebbfb308233f791b3c298bcfb01585b8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7d42436d7248292cda118c88599a23c3a409f361","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        self.assertEqual(test_data, data)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)"},{"line_number":275,"context_line":"    @base.skip_if_microversion_not_supported(\"2.26\")"},{"line_number":276,"context_line":"    @testtools.skipUnless(CONF.share.run_host_assisted_migration_tests or"},{"line_number":277,"context_line":"                          CONF.share.run_driver_assisted_migration_tests,"},{"line_number":278,"context_line":"                          \"Share migration tests are disabled.\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"9a57fde8_c430bca1","line":275,"range":{"start_line":275,"start_character":10,"end_line":275,"end_character":44},"updated":"2017-01-12 10:36:04.000000000","message":"skip_if_microversion_lt","commit_id":"aa3ba14e4a53b8c88ddf5f4604d7889b549aaeb8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c9597b20a73a87cfa73ffd88a4d3ad17798efe33","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        self.assertEqual(test_data, data)"},{"line_number":273,"context_line":""},{"line_number":274,"context_line":"    @tc.attr(base.TAG_POSITIVE, base.TAG_BACKEND)"},{"line_number":275,"context_line":"    @base.skip_if_microversion_not_supported(\"2.26\")"},{"line_number":276,"context_line":"    @testtools.skipUnless(CONF.share.run_host_assisted_migration_tests or"},{"line_number":277,"context_line":"                          CONF.share.run_driver_assisted_migration_tests,"},{"line_number":278,"context_line":"                          \"Share migration tests are disabled.\")"}],"source_content_type":"text/x-python","patch_set":13,"id":"7a3c09a3_126af080","line":275,"range":{"start_line":275,"start_character":10,"end_line":275,"end_character":44},"in_reply_to":"9a57fde8_c430bca1","updated":"2017-01-16 15:28:51.000000000","message":"Done","commit_id":"aa3ba14e4a53b8c88ddf5f4604d7889b549aaeb8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7d42436d7248292cda118c88599a23c3a409f361","unresolved":false,"context_lines":[{"line_number":283,"context_line":"            if not CONF.share.run_host_assisted_migration_tests:"},{"line_number":284,"context_line":"                raise self.skipException(\"Host-assisted migration tests are \""},{"line_number":285,"context_line":"                                         \"disabled.\")"},{"line_number":286,"context_line":"        else:"},{"line_number":287,"context_line":"            if not CONF.share.run_driver_assisted_migration_tests:"},{"line_number":288,"context_line":"                raise self.skipException(\"Driver-assisted migration tests are \""},{"line_number":289,"context_line":"                                         \"disabled.\")"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"9a57fde8_a4d2d832","line":287,"range":{"start_line":286,"start_character":8,"end_line":287,"end_character":66},"updated":"2017-01-12 10:36:04.000000000","message":"elif not CONF.share.run_driver_assisted_migration_tests:","commit_id":"aa3ba14e4a53b8c88ddf5f4604d7889b549aaeb8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c9597b20a73a87cfa73ffd88a4d3ad17798efe33","unresolved":false,"context_lines":[{"line_number":283,"context_line":"            if not CONF.share.run_host_assisted_migration_tests:"},{"line_number":284,"context_line":"                raise self.skipException(\"Host-assisted migration tests are \""},{"line_number":285,"context_line":"                                         \"disabled.\")"},{"line_number":286,"context_line":"        else:"},{"line_number":287,"context_line":"            if not CONF.share.run_driver_assisted_migration_tests:"},{"line_number":288,"context_line":"                raise self.skipException(\"Driver-assisted migration tests are \""},{"line_number":289,"context_line":"                                         \"disabled.\")"},{"line_number":290,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7a3c09a3_32ba8ce2","line":287,"range":{"start_line":286,"start_character":8,"end_line":287,"end_character":66},"in_reply_to":"9a57fde8_a4d2d832","updated":"2017-01-16 15:28:51.000000000","message":"Done","commit_id":"aa3ba14e4a53b8c88ddf5f4604d7889b549aaeb8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":279,"context_line":"    @ddt.data(True, False)"},{"line_number":280,"context_line":"    def test_migration_files(self, force_host_assisted):"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        if force_host_assisted:"},{"line_number":283,"context_line":"            if not CONF.share.run_host_assisted_migration_tests:"},{"line_number":284,"context_line":"                raise self.skipException(\"Host-assisted migration tests are \""},{"line_number":285,"context_line":"                                         \"disabled.\")"},{"line_number":286,"context_line":"        elif not CONF.share.run_driver_assisted_migration_tests:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_bf226eff","line":283,"range":{"start_line":282,"start_character":30,"end_line":283,"end_character":15},"updated":"2017-01-16 16:45:05.000000000","message":"and","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":279,"context_line":"    @ddt.data(True, False)"},{"line_number":280,"context_line":"    def test_migration_files(self, force_host_assisted):"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        if force_host_assisted:"},{"line_number":283,"context_line":"            if not CONF.share.run_host_assisted_migration_tests:"},{"line_number":284,"context_line":"                raise self.skipException(\"Host-assisted migration tests are \""},{"line_number":285,"context_line":"                                         \"disabled.\")"},{"line_number":286,"context_line":"        elif not CONF.share.run_driver_assisted_migration_tests:"}],"source_content_type":"text/x-python","patch_set":14,"id":"7a3c09a3_d30491c1","line":283,"range":{"start_line":282,"start_character":30,"end_line":283,"end_character":15},"in_reply_to":"7a3c09a3_bf226eff","updated":"2017-01-16 17:55:37.000000000","message":"Done","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"8b460b5eb14b2d96afd3987193bed0e43a59eb25","unresolved":false,"context_lines":[{"line_number":279,"context_line":"    @ddt.data(True, False)"},{"line_number":280,"context_line":"    def test_migration_files(self, force_host_assisted):"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        if (force_host_assisted and"},{"line_number":283,"context_line":"                not CONF.share.run_host_assisted_migration_tests):"},{"line_number":284,"context_line":"                raise self.skipException(\"Host-assisted migration tests are \""},{"line_number":285,"context_line":"                                         \"disabled.\")"},{"line_number":286,"context_line":"        elif not CONF.share.run_driver_assisted_migration_tests:"},{"line_number":287,"context_line":"                raise self.skipException(\"Driver-assisted migration tests are \""},{"line_number":288,"context_line":"                                         \"disabled.\")"},{"line_number":289,"context_line":""},{"line_number":290,"context_line":"        if self.protocol !\u003d \"nfs\":"},{"line_number":291,"context_line":"            raise self.skipException(\"Only NFS protocol supported \""}],"source_content_type":"text/x-python","patch_set":21,"id":"7a3c09a3_c70d8be9","line":288,"range":{"start_line":282,"start_character":8,"end_line":288,"end_character":53},"updated":"2017-01-17 09:53:38.000000000","message":"I will fix this logic in next patch","commit_id":"7e99f4f1ee11c9e091a6d6933357b7c2a2098407"}],"releasenotes/notes/bp-ocata-migration-improvements-c8c5675e266100da.yaml":[{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1d815b9b51753616e69db82c0ae1ba06724c7ae0","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Share Migration Ocata Improvements"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Add snapshot support to driver-assisted share migration."},{"line_number":6,"context_line":"  - Added validation of force-assisted-migration API option"},{"line_number":7,"context_line":"    conflicting with driver-assisted options."},{"line_number":8,"context_line":"upgrade:"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"9a57fde8_5f52b714","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":7},"updated":"2017-01-12 19:43:18.000000000","message":"Added","commit_id":"aa3ba14e4a53b8c88ddf5f4604d7889b549aaeb8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c9597b20a73a87cfa73ffd88a4d3ad17798efe33","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Share Migration Ocata Improvements"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Add snapshot support to driver-assisted share migration."},{"line_number":6,"context_line":"  - Added validation of force-assisted-migration API option"},{"line_number":7,"context_line":"    conflicting with driver-assisted options."},{"line_number":8,"context_line":"upgrade:"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"7a3c09a3_39cc2c35","line":5,"range":{"start_line":5,"start_character":4,"end_line":5,"end_character":7},"in_reply_to":"9a57fde8_5f52b714","updated":"2017-01-16 15:28:51.000000000","message":"Done","commit_id":"aa3ba14e4a53b8c88ddf5f4604d7889b549aaeb8"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1d815b9b51753616e69db82c0ae1ba06724c7ae0","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    migration have been updated to include snapshot support"},{"line_number":15,"context_line":"    option defaulting to False."},{"line_number":16,"context_line":"deprecations:"},{"line_number":17,"context_line":"  - Removed Snapshot restriction from the API."},{"line_number":18,"context_line":"  - API versions earlier than \u00272.24\u0027 will no longer"},{"line_number":19,"context_line":"    be accepted for migration-start Experimental API"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"9a57fde8_bfc48392","line":17,"range":{"start_line":17,"start_character":42,"end_line":17,"end_character":45},"updated":"2017-01-12 19:43:18.000000000","message":"s/API/share migration API","commit_id":"aa3ba14e4a53b8c88ddf5f4604d7889b549aaeb8"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"1d815b9b51753616e69db82c0ae1ba06724c7ae0","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    migration have been updated to include snapshot support"},{"line_number":15,"context_line":"    option defaulting to False."},{"line_number":16,"context_line":"deprecations:"},{"line_number":17,"context_line":"  - Removed Snapshot restriction from the API."},{"line_number":18,"context_line":"  - API versions earlier than \u00272.24\u0027 will no longer"},{"line_number":19,"context_line":"    be accepted for migration-start Experimental API"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"9a57fde8_bf964392","line":17,"range":{"start_line":17,"start_character":12,"end_line":17,"end_character":20},"updated":"2017-01-12 19:43:18.000000000","message":"snapshot","commit_id":"aa3ba14e4a53b8c88ddf5f4604d7889b549aaeb8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c9597b20a73a87cfa73ffd88a4d3ad17798efe33","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    migration have been updated to include snapshot support"},{"line_number":15,"context_line":"    option defaulting to False."},{"line_number":16,"context_line":"deprecations:"},{"line_number":17,"context_line":"  - Removed Snapshot restriction from the API."},{"line_number":18,"context_line":"  - API versions earlier than \u00272.24\u0027 will no longer"},{"line_number":19,"context_line":"    be accepted for migration-start Experimental API"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"7a3c09a3_99db60ed","line":17,"range":{"start_line":17,"start_character":12,"end_line":17,"end_character":20},"in_reply_to":"9a57fde8_bf964392","updated":"2017-01-16 15:28:51.000000000","message":"Done","commit_id":"aa3ba14e4a53b8c88ddf5f4604d7889b549aaeb8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c9597b20a73a87cfa73ffd88a4d3ad17798efe33","unresolved":false,"context_lines":[{"line_number":14,"context_line":"    migration have been updated to include snapshot support"},{"line_number":15,"context_line":"    option defaulting to False."},{"line_number":16,"context_line":"deprecations:"},{"line_number":17,"context_line":"  - Removed Snapshot restriction from the API."},{"line_number":18,"context_line":"  - API versions earlier than \u00272.24\u0027 will no longer"},{"line_number":19,"context_line":"    be accepted for migration-start Experimental API"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"7a3c09a3_b9d81cf1","line":17,"range":{"start_line":17,"start_character":42,"end_line":17,"end_character":45},"in_reply_to":"9a57fde8_bfc48392","updated":"2017-01-16 15:28:51.000000000","message":"Done","commit_id":"aa3ba14e4a53b8c88ddf5f4604d7889b549aaeb8"},{"author":{"_account_id":8851,"name":"Valeriy Ponomaryov","email":"kiparis.kh@gmail.com","username":"vponomaryov"},"change_message_id":"7d42436d7248292cda118c88599a23c3a409f361","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    option defaulting to False."},{"line_number":16,"context_line":"deprecations:"},{"line_number":17,"context_line":"  - Removed Snapshot restriction from the API."},{"line_number":18,"context_line":"  - API versions earlier than \u00272.24\u0027 will no longer"},{"line_number":19,"context_line":"    be accepted for migration-start Experimental API"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"9a57fde8_a43658b2","line":18,"range":{"start_line":18,"start_character":33,"end_line":18,"end_character":35},"updated":"2017-01-12 10:36:04.000000000","message":"26","commit_id":"aa3ba14e4a53b8c88ddf5f4604d7889b549aaeb8"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c9597b20a73a87cfa73ffd88a4d3ad17798efe33","unresolved":false,"context_lines":[{"line_number":15,"context_line":"    option defaulting to False."},{"line_number":16,"context_line":"deprecations:"},{"line_number":17,"context_line":"  - Removed Snapshot restriction from the API."},{"line_number":18,"context_line":"  - API versions earlier than \u00272.24\u0027 will no longer"},{"line_number":19,"context_line":"    be accepted for migration-start Experimental API"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"7a3c09a3_d9e5e8a8","line":18,"range":{"start_line":18,"start_character":33,"end_line":18,"end_character":35},"in_reply_to":"9a57fde8_a43658b2","updated":"2017-01-16 15:28:51.000000000","message":"Done","commit_id":"aa3ba14e4a53b8c88ddf5f4604d7889b549aaeb8"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Share Migration Ocata Improvements"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Added snapshot support to driver-assisted share migration."},{"line_number":6,"context_line":"  - Added validation of force-assisted-migration API option"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7a3c09a3_bffeee35","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":38},"updated":"2017-01-16 16:45:05.000000000","message":"The share migration feature was improved to support migrating snapshots where possible and provide a more deterministic user experience.","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Share Migration Ocata Improvements"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Added snapshot support to driver-assisted share migration."},{"line_number":6,"context_line":"  - Added validation of force-assisted-migration API option"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7a3c09a3_13bb79e6","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":38},"in_reply_to":"7a3c09a3_bffeee35","updated":"2017-01-16 17:55:37.000000000","message":"Done","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Share Migration Ocata Improvements"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Added snapshot support to driver-assisted share migration."},{"line_number":6,"context_line":"  - Added validation of force-assisted-migration API option"},{"line_number":7,"context_line":"    conflicting with driver-assisted options."},{"line_number":8,"context_line":"upgrade:"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7a3c09a3_ff7dd6b1","line":5,"range":{"start_line":5,"start_character":52,"end_line":5,"end_character":61},"updated":"2017-01-16 16:45:05.000000000","message":"Added \u0027preserve_snapshots\u0027 parameter to share migration API.\n\nbecause the statement above sounds like you are supporting it across drivers in this change","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Share Migration Ocata Improvements"},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Added snapshot support to driver-assisted share migration."},{"line_number":6,"context_line":"  - Added validation of force-assisted-migration API option"},{"line_number":7,"context_line":"    conflicting with driver-assisted options."},{"line_number":8,"context_line":"upgrade:"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7a3c09a3_73867d14","line":5,"range":{"start_line":5,"start_character":52,"end_line":5,"end_character":61},"in_reply_to":"7a3c09a3_ff7dd6b1","updated":"2017-01-16 17:55:37.000000000","message":"Done","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":8,"context_line":"upgrade:"},{"line_number":9,"context_line":"  - All share migration driver-assisted API parameters are"},{"line_number":10,"context_line":"    now mandatory."},{"line_number":11,"context_line":"  - Changed \u0027same host\u0027 API validation to \u0027same"},{"line_number":12,"context_line":"    host-share_network-share_type\u0027 combination."},{"line_number":13,"context_line":"  - Existing drivers that implement driver-assisted share"},{"line_number":14,"context_line":"    migration have been updated to include snapshot support"},{"line_number":15,"context_line":"    option defaulting to False."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7a3c09a3_ff54f621","line":12,"range":{"start_line":11,"start_character":4,"end_line":12,"end_character":47},"updated":"2017-01-16 16:45:05.000000000","message":"where? \n\nAll of these bullet points are independent","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":8,"context_line":"upgrade:"},{"line_number":9,"context_line":"  - All share migration driver-assisted API parameters are"},{"line_number":10,"context_line":"    now mandatory."},{"line_number":11,"context_line":"  - Changed \u0027same host\u0027 API validation to \u0027same"},{"line_number":12,"context_line":"    host-share_network-share_type\u0027 combination."},{"line_number":13,"context_line":"  - Existing drivers that implement driver-assisted share"},{"line_number":14,"context_line":"    migration have been updated to include snapshot support"},{"line_number":15,"context_line":"    option defaulting to False."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7a3c09a3_b3d705be","line":12,"range":{"start_line":11,"start_character":4,"end_line":12,"end_character":47},"in_reply_to":"7a3c09a3_ff54f621","updated":"2017-01-16 17:55:37.000000000","message":"Done","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    now mandatory."},{"line_number":11,"context_line":"  - Changed \u0027same host\u0027 API validation to \u0027same"},{"line_number":12,"context_line":"    host-share_network-share_type\u0027 combination."},{"line_number":13,"context_line":"  - Existing drivers that implement driver-assisted share"},{"line_number":14,"context_line":"    migration have been updated to include snapshot support"},{"line_number":15,"context_line":"    option defaulting to False."},{"line_number":16,"context_line":"  - Snapshot restriction in API has been changed to return"},{"line_number":17,"context_line":"    error only when parameter force-host-assisted-migration"},{"line_number":18,"context_line":"    is True."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7a3c09a3_1f19c288","line":15,"range":{"start_line":13,"start_character":4,"end_line":15,"end_character":31},"updated":"2017-01-16 16:45:05.000000000","message":"Which ones?","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":10,"context_line":"    now mandatory."},{"line_number":11,"context_line":"  - Changed \u0027same host\u0027 API validation to \u0027same"},{"line_number":12,"context_line":"    host-share_network-share_type\u0027 combination."},{"line_number":13,"context_line":"  - Existing drivers that implement driver-assisted share"},{"line_number":14,"context_line":"    migration have been updated to include snapshot support"},{"line_number":15,"context_line":"    option defaulting to False."},{"line_number":16,"context_line":"  - Snapshot restriction in API has been changed to return"},{"line_number":17,"context_line":"    error only when parameter force-host-assisted-migration"},{"line_number":18,"context_line":"    is True."}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7a3c09a3_137a99f1","line":15,"range":{"start_line":13,"start_character":4,"end_line":15,"end_character":31},"in_reply_to":"7a3c09a3_1f19c288","updated":"2017-01-16 17:55:37.000000000","message":"Done","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":13,"context_line":"  - Existing drivers that implement driver-assisted share"},{"line_number":14,"context_line":"    migration have been updated to include snapshot support"},{"line_number":15,"context_line":"    option defaulting to False."},{"line_number":16,"context_line":"  - Snapshot restriction in API has been changed to return"},{"line_number":17,"context_line":"    error only when parameter force-host-assisted-migration"},{"line_number":18,"context_line":"    is True."},{"line_number":19,"context_line":"deprecations:"},{"line_number":20,"context_line":"  - API versions earlier than \u00272.26\u0027 will no longer"},{"line_number":21,"context_line":"    be accepted for migration-start Experimental API"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7a3c09a3_a23b31d0","line":18,"range":{"start_line":16,"start_character":4,"end_line":18,"end_character":12},"updated":"2017-01-16 16:45:05.000000000","message":"Isn\u0027t this the same as point 1 in \"features\"?","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":13,"context_line":"  - Existing drivers that implement driver-assisted share"},{"line_number":14,"context_line":"    migration have been updated to include snapshot support"},{"line_number":15,"context_line":"    option defaulting to False."},{"line_number":16,"context_line":"  - Snapshot restriction in API has been changed to return"},{"line_number":17,"context_line":"    error only when parameter force-host-assisted-migration"},{"line_number":18,"context_line":"    is True."},{"line_number":19,"context_line":"deprecations:"},{"line_number":20,"context_line":"  - API versions earlier than \u00272.26\u0027 will no longer"},{"line_number":21,"context_line":"    be accepted for migration-start Experimental API"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7a3c09a3_53ffc166","line":18,"range":{"start_line":16,"start_character":4,"end_line":18,"end_character":12},"in_reply_to":"7a3c09a3_a23b31d0","updated":"2017-01-16 17:55:37.000000000","message":"no. First point is about having to specify writable\u003dTrue|False etc, this point is about now accepting shares from snapshots, where they previously would always return an error","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"7ed8f375c6b08d19490b1bf742ae4f1895b718cc","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    error only when parameter force-host-assisted-migration"},{"line_number":18,"context_line":"    is True."},{"line_number":19,"context_line":"deprecations:"},{"line_number":20,"context_line":"  - API versions earlier than \u00272.26\u0027 will no longer"},{"line_number":21,"context_line":"    be accepted for migration-start Experimental API"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7a3c09a3_025fa50e","line":21,"range":{"start_line":20,"start_character":4,"end_line":21,"end_character":52},"updated":"2017-01-16 16:45:05.000000000","message":"Support for the migration APIs has been dropped for API versions prior to 2.26.","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"c7735a23712677e70697f4d4998bb1b3e7185cd0","unresolved":false,"context_lines":[{"line_number":17,"context_line":"    error only when parameter force-host-assisted-migration"},{"line_number":18,"context_line":"    is True."},{"line_number":19,"context_line":"deprecations:"},{"line_number":20,"context_line":"  - API versions earlier than \u00272.26\u0027 will no longer"},{"line_number":21,"context_line":"    be accepted for migration-start Experimental API"}],"source_content_type":"text/x-yaml","patch_set":14,"id":"7a3c09a3_332f95f7","line":21,"range":{"start_line":20,"start_character":4,"end_line":21,"end_character":52},"in_reply_to":"7a3c09a3_025fa50e","updated":"2017-01-16 17:55:37.000000000","message":"Done","commit_id":"3cd856b14c25f3930cd84d9e10e7e96c033f79af"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d9d641f06471b02cb0f8d3825a038f8104beae90","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    deterministic user experience."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Added \u0027preserve_snapshots\u0027 parameter to share migration API."},{"line_number":8,"context_line":"  - Added validation of force-assisted-migration share"},{"line_number":9,"context_line":"    migration API option conflicting with driver-assisted options."},{"line_number":10,"context_line":"upgrade:"},{"line_number":11,"context_line":"  - All share migration driver-assisted API parameters are"},{"line_number":12,"context_line":"    now mandatory."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"7a3c09a3_47da944d","line":9,"range":{"start_line":8,"start_character":4,"end_line":9,"end_character":66},"updated":"2017-01-16 20:18:35.000000000","message":"kinda confusing, suggest:\n\n - Added validation in the share migration API to disallow\n   specifying conflicting combinations of options.\n\n\nor in that case:\n\n fixes:\n  - Added check to validate that host assisted migration cannot\n     be forced while specifying driver assisted migration options.","commit_id":"8e15b1862ec556b6463ce1e8fb0d2400a4c94404"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"673b23d4ef551f074aa6abb772077f36ac3c07d4","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    deterministic user experience."},{"line_number":6,"context_line":"features:"},{"line_number":7,"context_line":"  - Added \u0027preserve_snapshots\u0027 parameter to share migration API."},{"line_number":8,"context_line":"  - Added validation of force-assisted-migration share"},{"line_number":9,"context_line":"    migration API option conflicting with driver-assisted options."},{"line_number":10,"context_line":"upgrade:"},{"line_number":11,"context_line":"  - All share migration driver-assisted API parameters are"},{"line_number":12,"context_line":"    now mandatory."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"7a3c09a3_f3e342a2","line":9,"range":{"start_line":8,"start_character":4,"end_line":9,"end_character":66},"in_reply_to":"7a3c09a3_47da944d","updated":"2017-01-16 22:07:39.000000000","message":"Done","commit_id":"8e15b1862ec556b6463ce1e8fb0d2400a4c94404"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d9d641f06471b02cb0f8d3825a038f8104beae90","unresolved":false,"context_lines":[{"line_number":10,"context_line":"upgrade:"},{"line_number":11,"context_line":"  - All share migration driver-assisted API parameters are"},{"line_number":12,"context_line":"    now mandatory."},{"line_number":13,"context_line":"  - Changed \u0027same host\u0027 share migration API validation to"},{"line_number":14,"context_line":"    \u0027same host-share_network-share_type\u0027 combination."},{"line_number":15,"context_line":"  - Existing drivers (ZFSOnLinux and Dummy) that implement"},{"line_number":16,"context_line":"    driver-assisted share migration have been updated to"},{"line_number":17,"context_line":"    include snapshot support  option defaulting to False."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"7a3c09a3_87eabcaa","line":14,"range":{"start_line":13,"start_character":0,"end_line":14,"end_character":53},"updated":"2017-01-16 20:18:35.000000000","message":"the language \u0027\"same host\" check\u0027 may not be understood by non-developers. \n\n- The share migration API can only be invoked when at least one\n  parameter within (host, share-network, share-type) is expected to\n  be changed.\n\nAlso, this isn\u0027t an upgrade note, is it? you\u0027re breaking support for all micro versions, so this is essentially a new API and this can go into Fixes..","commit_id":"8e15b1862ec556b6463ce1e8fb0d2400a4c94404"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"673b23d4ef551f074aa6abb772077f36ac3c07d4","unresolved":false,"context_lines":[{"line_number":10,"context_line":"upgrade:"},{"line_number":11,"context_line":"  - All share migration driver-assisted API parameters are"},{"line_number":12,"context_line":"    now mandatory."},{"line_number":13,"context_line":"  - Changed \u0027same host\u0027 share migration API validation to"},{"line_number":14,"context_line":"    \u0027same host-share_network-share_type\u0027 combination."},{"line_number":15,"context_line":"  - Existing drivers (ZFSOnLinux and Dummy) that implement"},{"line_number":16,"context_line":"    driver-assisted share migration have been updated to"},{"line_number":17,"context_line":"    include snapshot support  option defaulting to False."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"7a3c09a3_b3dd3ae2","line":14,"range":{"start_line":13,"start_character":0,"end_line":14,"end_character":53},"in_reply_to":"7a3c09a3_87eabcaa","updated":"2017-01-16 22:07:39.000000000","message":"Done","commit_id":"8e15b1862ec556b6463ce1e8fb0d2400a4c94404"},{"author":{"_account_id":16643,"name":"Goutham Pacha Ravi","email":"gouthampravi@gmail.com","username":"gouthamr"},"change_message_id":"d9d641f06471b02cb0f8d3825a038f8104beae90","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    now mandatory."},{"line_number":13,"context_line":"  - Changed \u0027same host\u0027 share migration API validation to"},{"line_number":14,"context_line":"    \u0027same host-share_network-share_type\u0027 combination."},{"line_number":15,"context_line":"  - Existing drivers (ZFSOnLinux and Dummy) that implement"},{"line_number":16,"context_line":"    driver-assisted share migration have been updated to"},{"line_number":17,"context_line":"    include snapshot support  option defaulting to False."},{"line_number":18,"context_line":"  - Snapshot restriction in share migration API has been"},{"line_number":19,"context_line":"    changed to return error only when parameter"},{"line_number":20,"context_line":"    force-host-assisted-migration is True."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"7a3c09a3_a70ed838","line":17,"range":{"start_line":15,"start_character":4,"end_line":17,"end_character":57},"updated":"2017-01-16 20:18:35.000000000","message":"dummy driver is not expected to be part a release. Please only include the ZFSOnLinux driver, and perhaps more like a statement that we still support share migration APIs with this driver:\n\n\n - Improvements to the share migration API have been qualified with the driver\n   assisted migration support that exists in the ZFSOnLinux driver. However,\n   this driver does not support preserving snapshots on migration.\n\n\nHowever, I would love to check if Valeriy would like to add support for it in this release.","commit_id":"8e15b1862ec556b6463ce1e8fb0d2400a4c94404"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"673b23d4ef551f074aa6abb772077f36ac3c07d4","unresolved":false,"context_lines":[{"line_number":12,"context_line":"    now mandatory."},{"line_number":13,"context_line":"  - Changed \u0027same host\u0027 share migration API validation to"},{"line_number":14,"context_line":"    \u0027same host-share_network-share_type\u0027 combination."},{"line_number":15,"context_line":"  - Existing drivers (ZFSOnLinux and Dummy) that implement"},{"line_number":16,"context_line":"    driver-assisted share migration have been updated to"},{"line_number":17,"context_line":"    include snapshot support  option defaulting to False."},{"line_number":18,"context_line":"  - Snapshot restriction in share migration API has been"},{"line_number":19,"context_line":"    changed to return error only when parameter"},{"line_number":20,"context_line":"    force-host-assisted-migration is True."}],"source_content_type":"text/x-yaml","patch_set":17,"id":"7a3c09a3_d3dac6e7","line":17,"range":{"start_line":15,"start_character":4,"end_line":17,"end_character":57},"in_reply_to":"7a3c09a3_a70ed838","updated":"2017-01-16 22:07:39.000000000","message":"Done","commit_id":"8e15b1862ec556b6463ce1e8fb0d2400a4c94404"},{"author":{"_account_id":2417,"name":"Ben Swartzlander","email":"ben@swartzlander.org","username":"bswartz"},"change_message_id":"bd5f1cbb947239e0b1e8b46fee383221e4662648","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    changed to return error only when parameter"},{"line_number":17,"context_line":"    force-host-assisted-migration is True."},{"line_number":18,"context_line":"deprecations:"},{"line_number":19,"context_line":"  - Support for the share migration APIs has been dropped"},{"line_number":20,"context_line":"    for API microversions prior to 2.27."},{"line_number":21,"context_line":"fixes:"},{"line_number":22,"context_line":"  - Added check to validate that host assisted migration cannot"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"7a3c09a3_bfd1f831","line":19,"range":{"start_line":19,"start_character":4,"end_line":19,"end_character":40},"updated":"2017-01-18 21:54:25.000000000","message":"Support for the experimental share migration APIs...\n\n^ We don\u0027t want someone reading this and thinking we\u0027re violating any deprecation policies.","commit_id":"f5981917ef74595c4654f22e487ce2e9043d8831"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bdcdc9b4032d86f2cd4a54d564d5f356762c0220","unresolved":false,"context_lines":[{"line_number":16,"context_line":"    changed to return error only when parameter"},{"line_number":17,"context_line":"    force-host-assisted-migration is True."},{"line_number":18,"context_line":"deprecations:"},{"line_number":19,"context_line":"  - Support for the share migration APIs has been dropped"},{"line_number":20,"context_line":"    for API microversions prior to 2.27."},{"line_number":21,"context_line":"fixes:"},{"line_number":22,"context_line":"  - Added check to validate that host assisted migration cannot"}],"source_content_type":"text/x-yaml","patch_set":23,"id":"5a3905b3_c706ef1f","line":19,"range":{"start_line":19,"start_character":4,"end_line":19,"end_character":40},"in_reply_to":"7a3c09a3_bfd1f831","updated":"2017-01-19 12:47:23.000000000","message":"Will fix.","commit_id":"f5981917ef74595c4654f22e487ce2e9043d8831"}]}
