)]}'
{"manila/data/manager.py":[{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"45de24a620aa18e1320dc445f4b0891311037811","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        mount_path \u003d CONF.migration_tmp_location"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        try:"},{"line_number":173,"context_line":"            copy \u003d data_utils.Copy("},{"line_number":174,"context_line":"                os.path.join(mount_path, share_instance_id, path_src),"},{"line_number":175,"context_line":"                os.path.join(mount_path, dest_share_instance_id, path_dest),"},{"line_number":176,"context_line":"                [])"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa0719c6_14f089c8","line":173,"updated":"2016-03-23 12:06:24.000000000","message":"Would it make sense to check the total size and the free space before starting with the copy?","commit_id":"e51bce9f3acd888442baa4ce81baae4fa1c49653"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"83a2b6a44fa6c4e4f53b6f1d1ca308a61bc45678","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        mount_path \u003d CONF.migration_tmp_location"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        try:"},{"line_number":173,"context_line":"            copy \u003d data_utils.Copy("},{"line_number":174,"context_line":"                os.path.join(mount_path, share_instance_id, path_src),"},{"line_number":175,"context_line":"                os.path.join(mount_path, dest_share_instance_id, path_dest),"},{"line_number":176,"context_line":"                [])"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa0719c6_6c7651a5","line":173,"in_reply_to":"fa0719c6_14f089c8","updated":"2016-03-23 12:19:30.000000000","message":"It is not checking because this intelligence is delegated to drivers. Since drivers are in control of what they want to do, they should check their shares quotas and usages before starting the copy. We can discuss about a additional check, but this would possibly make it not possible to copy 1.5GB of data to a 2GB share that already has 1.5GB used, and the driver wants it to overwrite. But we can make this configurable. What do you think?","commit_id":"e51bce9f3acd888442baa4ce81baae4fa1c49653"},{"author":{"_account_id":7872,"name":"Marc Koderer","email":"marc@koderer.com","username":"mkoderer"},"change_message_id":"091734995d4debdc1f2866ff84f7b6469d5ca8a4","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        mount_path \u003d CONF.migration_tmp_location"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        try:"},{"line_number":173,"context_line":"            copy \u003d data_utils.Copy("},{"line_number":174,"context_line":"                os.path.join(mount_path, share_instance_id, path_src),"},{"line_number":175,"context_line":"                os.path.join(mount_path, dest_share_instance_id, path_dest),"},{"line_number":176,"context_line":"                [])"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa0719c6_e7043a4b","line":173,"in_reply_to":"fa0719c6_6c7651a5","updated":"2016-03-23 12:48:50.000000000","message":"Ok, I see. The point that is most critical is to check if the src_share is read_only (or protected with a fs freeze). Not sure how we can enforce that but if it\u0027s up to the driver it can be failure prone. This code actually accesses data inside a share and data loss/corruption is a very critical thing that we don\u0027t want to have :)","commit_id":"e51bce9f3acd888442baa4ce81baae4fa1c49653"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"19fec0f2ad90d5b590573ecc5d2d837f07e72db0","unresolved":false,"context_lines":[{"line_number":170,"context_line":"        mount_path \u003d CONF.migration_tmp_location"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"        try:"},{"line_number":173,"context_line":"            copy \u003d data_utils.Copy("},{"line_number":174,"context_line":"                os.path.join(mount_path, share_instance_id, path_src),"},{"line_number":175,"context_line":"                os.path.join(mount_path, dest_share_instance_id, path_dest),"},{"line_number":176,"context_line":"                [])"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa0719c6_982ddc00","line":173,"in_reply_to":"fa0719c6_e7043a4b","updated":"2016-03-23 14:04:50.000000000","message":"I am not sure if there is a case a driver would like to copy data while it is writable, or if coding such check would block any use case. I think we need to better discuss driver use cases at summit to know for sure. Any driver can be prone to failure if incorrectly coded, I am not sure if the purpose to this code is also to safeguard against bad driver implementations.\nPlease keep in mind that we are talking about the driver copying data specifically, so it should know what it is doing. For another feature \"Data Service API\" where the user would be able to copy data between shares, we definitely should add such check.","commit_id":"e51bce9f3acd888442baa4ce81baae4fa1c49653"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"24ccd9c5a1a493eee4efc3161d6a68e3e28fa318","unresolved":false,"context_lines":[{"line_number":406,"context_line":"            free \u003d int(out.split(\u0027\\n\u0027)[1].split()[3])"},{"line_number":407,"context_line":"            out, __ \u003d utils.execute(\u0027du\u0027, \u0027-bslLB1\u0027, copy_path_src,"},{"line_number":408,"context_line":"                                    run_as_root\u003dTrue)"},{"line_number":409,"context_line":"            used \u003d int(out.split()[0])"},{"line_number":410,"context_line":"            if used \u003e free:"},{"line_number":411,"context_line":"                msg \u003d _(\"There is not enough space to perform copying from \""},{"line_number":412,"context_line":"                        \"%(src)s to %(dest)s.\") % {\u0027src\u0027: copy_path_src,"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_d5cf1e27","line":409,"updated":"2016-05-10 10:44:57.000000000","message":"If I get it right it is probably better to call this \"required\" instead of \"used\".","commit_id":"7cf593e83cb1df1a8932650c597ece27a8c616e2"}],"manila/share/drivers_data_helper.py":[{"author":{"_account_id":17742,"name":"liucheng","email":"liucheng20@huawei.com","username":"liucheng"},"change_message_id":"9964801ee85b103e370d9a099f83f29f0659aaa6","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        src_share_instance_ref \u003d self.db.share_instance_get("},{"line_number":38,"context_line":"            context, src_share_instance_id, with_share_data\u003dTrue)"},{"line_number":39,"context_line":"        dest_share_instance_ref \u003d self.db.share_instance_get("},{"line_number":40,"context_line":"            context, dest_share_instance_id, with_share_data\u003dTrue)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        migration_info_src \u003d self.share_rpc.migration_get_info("},{"line_number":43,"context_line":"            context, src_share_instance_ref)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_5302af3f","line":40,"range":{"start_line":39,"start_character":7,"end_line":40,"end_character":66},"updated":"2016-05-06 03:14:40.000000000","message":"If the dest_share is created by driver, and share\u0027s data is not recorded in DB, what should I deal with this situation?","commit_id":"7cf593e83cb1df1a8932650c597ece27a8c616e2"},{"author":{"_account_id":17742,"name":"liucheng","email":"liucheng20@huawei.com","username":"liucheng"},"change_message_id":"d0ff1b2c7e75541fd95eee012d7e3cbcb8bac23f","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        src_share_instance_ref \u003d self.db.share_instance_get("},{"line_number":38,"context_line":"            context, src_share_instance_id, with_share_data\u003dTrue)"},{"line_number":39,"context_line":"        dest_share_instance_ref \u003d self.db.share_instance_get("},{"line_number":40,"context_line":"            context, dest_share_instance_id, with_share_data\u003dTrue)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        migration_info_src \u003d self.share_rpc.migration_get_info("},{"line_number":43,"context_line":"            context, src_share_instance_ref)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_ee73f6b2","line":40,"range":{"start_line":39,"start_character":7,"end_line":40,"end_character":66},"in_reply_to":"dab17558_5302af3f","updated":"2016-05-06 03:29:03.000000000","message":"I have mounted both src_share and dset_share, what I want to do is moving \"copy\" to manila-data service.","commit_id":"7cf593e83cb1df1a8932650c597ece27a8c616e2"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d94677e5b50276617799f155ea8c4e50690a1056","unresolved":false,"context_lines":[{"line_number":36,"context_line":""},{"line_number":37,"context_line":"        src_share_instance_ref \u003d self.db.share_instance_get("},{"line_number":38,"context_line":"            context, src_share_instance_id, with_share_data\u003dTrue)"},{"line_number":39,"context_line":"        dest_share_instance_ref \u003d self.db.share_instance_get("},{"line_number":40,"context_line":"            context, dest_share_instance_id, with_share_data\u003dTrue)"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"        migration_info_src \u003d self.share_rpc.migration_get_info("},{"line_number":43,"context_line":"            context, src_share_instance_ref)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_bc8d9a7d","line":40,"range":{"start_line":39,"start_character":7,"end_line":40,"end_character":66},"in_reply_to":"dab17558_5302af3f","updated":"2016-05-06 11:55:37.000000000","message":"This method \"copy_share_data\" from the driver data helper is invoked from your driver\u0027s create_share_from_snapshot. So at this point, manager has created a DB record for your new share with status creating, and expects you to return an export location for it. My suggestion of what your driver should do in this case is to create an empty share, and pass the parameters src_path, dest_path (your new empty share path) and the data service should copy data between them.","commit_id":"7cf593e83cb1df1a8932650c597ece27a8c616e2"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c5e2061bd3e98eed034c5f4dada59eb2804e3f64","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                        src_snapshot\u003dFalse):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        if src_snapshot:"},{"line_number":80,"context_line":"            src_share_instance_ref \u003d self.db.share_snapshot_instance_get("},{"line_number":81,"context_line":"                context, src_share_instance_id, with_share_data\u003dTrue)"},{"line_number":82,"context_line":"        else:"},{"line_number":83,"context_line":"            src_share_instance_ref \u003d self.db.share_instance_get("}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_53c4403f","line":80,"range":{"start_line":80,"start_character":12,"end_line":80,"end_character":34},"updated":"2016-05-24 16:24:09.000000000","message":"This is a snapshot instance ref and not a share instance ref.  See below.","commit_id":"f9868fc19aa2e6a0b761ddc3c8c0246d71c481b6"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"39a64a4a8f412c68c8f8f36ee8013892bc8ff5ef","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                        src_snapshot\u003dFalse):"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"        if src_snapshot:"},{"line_number":80,"context_line":"            src_share_instance_ref \u003d self.db.share_snapshot_instance_get("},{"line_number":81,"context_line":"                context, src_share_instance_id, with_share_data\u003dTrue)"},{"line_number":82,"context_line":"        else:"},{"line_number":83,"context_line":"            src_share_instance_ref \u003d self.db.share_instance_get("}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_6ee7d312","line":80,"range":{"start_line":80,"start_character":12,"end_line":80,"end_character":34},"in_reply_to":"bab6814e_53c4403f","updated":"2016-05-24 20:42:04.000000000","message":"Thanks for the heads up Mark. Reviewing the design, I believe that since we will have mountable snapshots separately, it does not make much sense trying to address mountable snapshots here in the helper at this moment (better have something to rebase on first). For drivers which have snapshots under \"/share/.snaps/snap_x/contents\" or similar, the source share could be mounted and contents copied from snapshot path.","commit_id":"f9868fc19aa2e6a0b761ddc3c8c0246d71c481b6"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"c5e2061bd3e98eed034c5f4dada59eb2804e3f64","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        dest_share_instance_ref \u003d self.db.share_instance_get("},{"line_number":86,"context_line":"            context, dest_share_instance_id, with_share_data\u003dTrue)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        migration_info_src \u003d self.share_rpc.migration_get_info("},{"line_number":89,"context_line":"            context, src_share_instance_ref)"},{"line_number":90,"context_line":"        migration_info_dest \u003d self.share_rpc.migration_get_info("},{"line_number":91,"context_line":"            context, dest_share_instance_ref)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_f33bb436","line":88,"range":{"start_line":88,"start_character":44,"end_line":88,"end_character":62},"updated":"2016-05-24 16:24:09.000000000","message":"This fails with the above src_snapshot because when you pass in a snapshot instance instead of a share instance you find that it doesn\u0027t have a \u0027host\u0027.","commit_id":"f9868fc19aa2e6a0b761ddc3c8c0246d71c481b6"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"39a64a4a8f412c68c8f8f36ee8013892bc8ff5ef","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        dest_share_instance_ref \u003d self.db.share_instance_get("},{"line_number":86,"context_line":"            context, dest_share_instance_id, with_share_data\u003dTrue)"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        migration_info_src \u003d self.share_rpc.migration_get_info("},{"line_number":89,"context_line":"            context, src_share_instance_ref)"},{"line_number":90,"context_line":"        migration_info_dest \u003d self.share_rpc.migration_get_info("},{"line_number":91,"context_line":"            context, dest_share_instance_ref)"}],"source_content_type":"text/x-python","patch_set":6,"id":"bab6814e_cebcffdd","line":88,"range":{"start_line":88,"start_character":44,"end_line":88,"end_character":62},"in_reply_to":"bab6814e_f33bb436","updated":"2016-05-24 20:42:04.000000000","message":"thanks for the heads up, see comment above, this should be addressed for now.","commit_id":"f9868fc19aa2e6a0b761ddc3c8c0246d71c481b6"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"c6a8a554c474e3cc3708333a3aefa2ceafe82191","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                \u0027src_path\u0027: src_path,"},{"line_number":71,"context_line":"                \u0027dest_path\u0027: dest_path"},{"line_number":72,"context_line":"            })"},{"line_number":73,"context_line":"            raise exception.ShareDataCopyCancelled(reason\u003dmsg)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def copy_share_data(self, context, src_share_instance_id, src_path,"},{"line_number":76,"context_line":"                        dest_share_instance_id, dest_path, force_copy\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_69adcd9a","line":73,"updated":"2016-05-25 20:55:25.000000000","message":"When we raise this exception, is it caught and manager\u0027s driver_data_helper_complete() run so that the request lock is cleared?","commit_id":"0fae4ed39aa68cca1cf79859902d8332a1c3d501"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"b1c40186c33c49f47a58c65f3a373f2c829295c6","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                \u0027src_path\u0027: src_path,"},{"line_number":71,"context_line":"                \u0027dest_path\u0027: dest_path"},{"line_number":72,"context_line":"            })"},{"line_number":73,"context_line":"            raise exception.ShareDataCopyCancelled(reason\u003dmsg)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def copy_share_data(self, context, src_share_instance_id, src_path,"},{"line_number":76,"context_line":"                        dest_share_instance_id, dest_path, force_copy\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_4378ca2a","line":73,"in_reply_to":"9abb7d3a_965673d0","updated":"2016-05-30 15:11:43.000000000","message":"OK, thanks for explaining.","commit_id":"0fae4ed39aa68cca1cf79859902d8332a1c3d501"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"27a5c5e189cc1f647784efb437760ba1f847d958","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                \u0027src_path\u0027: src_path,"},{"line_number":71,"context_line":"                \u0027dest_path\u0027: dest_path"},{"line_number":72,"context_line":"            })"},{"line_number":73,"context_line":"            raise exception.ShareDataCopyCancelled(reason\u003dmsg)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def copy_share_data(self, context, src_share_instance_id, src_path,"},{"line_number":76,"context_line":"                        dest_share_instance_id, dest_path, force_copy\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9abb7d3a_965673d0","line":73,"in_reply_to":"bab6814e_69adcd9a","updated":"2016-05-30 14:01:26.000000000","message":"this method does not run on manager\u0027s driver_data_helper_complete\u0027s stack, so the one that should be capturing this exception is the driver, to handle whether the method it invoked raised this exception. The lock is cleared before the thread reach this code block.","commit_id":"0fae4ed39aa68cca1cf79859902d8332a1c3d501"},{"author":{"_account_id":17742,"name":"liucheng","email":"liucheng20@huawei.com","username":"liucheng"},"change_message_id":"133dc79310305b4579d07cafa58ef5116f329c86","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            })"},{"line_number":73,"context_line":"            raise exception.ShareDataCopyCancelled(reason\u003dmsg)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def copy_share_data(self, context, src_share_instance_id, src_path,"},{"line_number":76,"context_line":"                        dest_share_instance_id, dest_path, force_copy\u003dTrue):"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        src_share_instance_ref \u003d self.db.share_instance_get("},{"line_number":79,"context_line":"            context, src_share_instance_id, with_share_data\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_227761a0","line":76,"range":{"start_line":75,"start_character":4,"end_line":76,"end_character":76},"updated":"2016-06-12 01:30:44.000000000","message":"When create a share from snapshot how could I call this API? Who will create the dest_share,the framework or driver? If the new share is created by driver, it will be not recorded in DB.","commit_id":"0fae4ed39aa68cca1cf79859902d8332a1c3d501"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"bebc8387436f7db0cc9820be7b5d24c1f2658190","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            })"},{"line_number":73,"context_line":"            raise exception.ShareDataCopyCancelled(reason\u003dmsg)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def copy_share_data(self, context, src_share_instance_id, src_path,"},{"line_number":76,"context_line":"                        dest_share_instance_id, dest_path, force_copy\u003dTrue):"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        src_share_instance_ref \u003d self.db.share_instance_get("},{"line_number":79,"context_line":"            context, src_share_instance_id, with_share_data\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7aa08908_c7b64bf8","line":76,"range":{"start_line":75,"start_character":4,"end_line":76,"end_character":76},"in_reply_to":"7aa08908_227761a0","updated":"2016-06-13 13:31:15.000000000","message":"when creating a share from snapshot, manila has already created the new share DB entry for you. Your driver should create an empty share in your backend, and then invoke this method.\n\nTo access this method, you need to obtain it through kwargs, similar to private_storage.","commit_id":"0fae4ed39aa68cca1cf79859902d8332a1c3d501"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"5075d834e1db858802fee221f1588cf295fad804","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        for share in share_list:"},{"line_number":90,"context_line":"            self.db.share_update("},{"line_number":91,"context_line":"                context, share[\u0027id\u0027],"},{"line_number":92,"context_line":"                {\u0027task_state\u0027: constants.TASK_STATE_DATA_JOB_PREPARING})"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        request_id \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_0fadd787","line":91,"range":{"start_line":91,"start_character":25,"end_line":91,"end_character":36},"updated":"2016-06-24 22:55:13.000000000","message":"\u0027share_id\u0027 keys were used to build the list above. So \u0027share\u0027 is already a string and not a dict here.","commit_id":"8483f95be0c63ac8fc7b65b677ecb118d7f4e754"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"d8c9c5268cbcb873897de8c9117d7f689bdb5756","unresolved":false,"context_lines":[{"line_number":88,"context_line":""},{"line_number":89,"context_line":"        for share in share_list:"},{"line_number":90,"context_line":"            self.db.share_update("},{"line_number":91,"context_line":"                context, share[\u0027id\u0027],"},{"line_number":92,"context_line":"                {\u0027task_state\u0027: constants.TASK_STATE_DATA_JOB_PREPARING})"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"        request_id \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_57076981","line":91,"range":{"start_line":91,"start_character":25,"end_line":91,"end_character":36},"in_reply_to":"3aaa91ec_0fadd787","updated":"2016-06-25 14:02:10.000000000","message":"Thanks Mark! that one slipped by.","commit_id":"8483f95be0c63ac8fc7b65b677ecb118d7f4e754"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"168ac8ab08af7315233a51a81e1cafa33b02e415","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    def data_copy_cancel(self, context, src_share_instance_id):"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        src_share_instance_ref \u003d self.db.share_instance_get("},{"line_number":119,"context_line":"            context, src_share_instance_id, with_share_data\u003dTrue)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        self.data_rpc.data_copy_cancel("},{"line_number":122,"context_line":"            context, src_share_instance_ref[\u0027share_id\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"bacf61ea_7314eef4","line":119,"range":{"start_line":119,"start_character":44,"end_line":119,"end_character":64},"updated":"2016-07-28 05:51:19.000000000","message":"Only src_share_instance_ref[\u0027share_id\u0027] is used from the query result, so this with_share_data may not be necessary to set to True.","commit_id":"b8f5f31c995bc1b0eeca8612909a9202bcaa5383"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"11373af24f6a28b6891a434655191aa4264adfcd","unresolved":false,"context_lines":[{"line_number":116,"context_line":"    def data_copy_cancel(self, context, src_share_instance_id):"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        src_share_instance_ref \u003d self.db.share_instance_get("},{"line_number":119,"context_line":"            context, src_share_instance_id, with_share_data\u003dTrue)"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        self.data_rpc.data_copy_cancel("},{"line_number":122,"context_line":"            context, src_share_instance_ref[\u0027share_id\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"bacf61ea_113d7cbb","line":119,"range":{"start_line":119,"start_character":44,"end_line":119,"end_character":64},"in_reply_to":"bacf61ea_7314eef4","updated":"2016-07-28 20:32:46.000000000","message":"Done","commit_id":"b8f5f31c995bc1b0eeca8612909a9202bcaa5383"},{"author":{"_account_id":16203,"name":"zengyingzhe","email":"zengyingzhe@huawei.com","username":"zengyingzhe"},"change_message_id":"168ac8ab08af7315233a51a81e1cafa33b02e415","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    def data_copy_get_progress(self, context, src_share_instance_id):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        src_share_instance_ref \u003d self.db.share_instance_get("},{"line_number":127,"context_line":"            context, src_share_instance_id, with_share_data\u003dTrue)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        return self.data_rpc.data_copy_get_progress("},{"line_number":130,"context_line":"            context, src_share_instance_ref[\u0027share_id\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"bacf61ea_f300deac","line":127,"range":{"start_line":127,"start_character":44,"end_line":127,"end_character":64},"updated":"2016-07-28 05:51:19.000000000","message":"ditto","commit_id":"b8f5f31c995bc1b0eeca8612909a9202bcaa5383"},{"author":{"_account_id":14567,"name":"Rodrigo Barbieri","email":"rodrigo.barbieri2010@gmail.com","username":"ganso"},"change_message_id":"11373af24f6a28b6891a434655191aa4264adfcd","unresolved":false,"context_lines":[{"line_number":124,"context_line":"    def data_copy_get_progress(self, context, src_share_instance_id):"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        src_share_instance_ref \u003d self.db.share_instance_get("},{"line_number":127,"context_line":"            context, src_share_instance_id, with_share_data\u003dTrue)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"        return self.data_rpc.data_copy_get_progress("},{"line_number":130,"context_line":"            context, src_share_instance_ref[\u0027share_id\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"bacf61ea_714cb870","line":127,"range":{"start_line":127,"start_character":44,"end_line":127,"end_character":64},"in_reply_to":"bacf61ea_f300deac","updated":"2016-07-28 20:32:46.000000000","message":"Done","commit_id":"b8f5f31c995bc1b0eeca8612909a9202bcaa5383"}],"manila/share/manager.py":[{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"24ccd9c5a1a493eee4efc3161d6a68e3e28fa318","unresolved":false,"context_lines":[{"line_number":937,"context_line":"            method(context, src_share_instance_ref, src_path,"},{"line_number":938,"context_line":"                   dest_share_instance_ref, dest_path, src_share_server)"},{"line_number":939,"context_line":""},{"line_number":940,"context_line":"    def driver_data_copy_complete_dest(self, context, src_share_id,"},{"line_number":941,"context_line":"                                       dest_share_id, src_path, dest_path,"},{"line_number":942,"context_line":"                                       src_share_instance_id,"},{"line_number":943,"context_line":"                                       dest_share_instance_id, callback\u003dNone):"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_58b8832a","line":940,"updated":"2016-05-10 10:44:57.000000000","message":"This method looks very similar to driver_data_copy_complete_src. Maybe it is worth the effort to refactor both of them into a single internal method and two external method wrapping its invocation.","commit_id":"7cf593e83cb1df1a8932650c597ece27a8c616e2"},{"author":{"_account_id":6938,"name":"Alexey Ovchinnikov","email":"aovchinnikov@mirantis.com","username":"aovchinnikov"},"change_message_id":"24ccd9c5a1a493eee4efc3161d6a68e3e28fa318","unresolved":false,"context_lines":[{"line_number":966,"context_line":"            method(context, src_share_instance_ref, src_path,"},{"line_number":967,"context_line":"                   dest_share_instance_ref, dest_path, dest_share_server)"},{"line_number":968,"context_line":""},{"line_number":969,"context_line":"    def driver_data_delete_complete(self, context, share_id, path,"},{"line_number":970,"context_line":"                                    share_instance_id, callback\u003dNone):"},{"line_number":971,"context_line":""},{"line_number":972,"context_line":"        share_ref \u003d self.db.share_get(context, share_id)"}],"source_content_type":"text/x-python","patch_set":2,"id":"dab17558_b8f6cff6","line":969,"updated":"2016-05-10 10:44:57.000000000","message":"This one looks like it could make use of the suggested internal method as well.","commit_id":"7cf593e83cb1df1a8932650c597ece27a8c616e2"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"e861d07ce728943c984a6661629dab8af70941d0","unresolved":false,"context_lines":[{"line_number":1007,"context_line":"        if request.get(\u0027request_type\u0027) \u003d\u003d \u0027driver\u0027:"},{"line_number":1008,"context_line":"            request_id \u003d request[\u0027request_id\u0027]"},{"line_number":1009,"context_line":"            lock \u003d self.data_service_helper._locks.get(request_id)"},{"line_number":1010,"context_line":"            lock.release()"},{"line_number":1011,"context_line":"            self.data_service_helper._locks.pop(request_id)"},{"line_number":1012,"context_line":""},{"line_number":1013,"context_line":"    def _get_share_instance(self, context, share):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_839bc9c8","line":1010,"range":{"start_line":1010,"start_character":12,"end_line":1010,"end_character":16},"updated":"2016-06-29 03:54:51.000000000","message":"if lock:  (when I use src\u003ddest I needed that) ...","commit_id":"8483f95be0c63ac8fc7b65b677ecb118d7f4e754"},{"author":{"_account_id":11047,"name":"Mark Sturdevant","email":"mark.sturdevant@ibm.com","username":"markstur"},"change_message_id":"e861d07ce728943c984a6661629dab8af70941d0","unresolved":false,"context_lines":[{"line_number":1008,"context_line":"            request_id \u003d request[\u0027request_id\u0027]"},{"line_number":1009,"context_line":"            lock \u003d self.data_service_helper._locks.get(request_id)"},{"line_number":1010,"context_line":"            lock.release()"},{"line_number":1011,"context_line":"            self.data_service_helper._locks.pop(request_id)"},{"line_number":1012,"context_line":""},{"line_number":1013,"context_line":"    def _get_share_instance(self, context, share):"},{"line_number":1014,"context_line":"        if isinstance(share, six.string_types):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3aaa91ec_03b07942","line":1011,"updated":"2016-06-29 03:54:51.000000000","message":"(request_id, None) to allow not found if my src\u003ddest case is valid.","commit_id":"8483f95be0c63ac8fc7b65b677ecb118d7f4e754"}]}
