)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"bc0a2b7f4237a872a9dc35b9e4d7f3dc4efa1c90","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Ronen Mesonzhnik \u003cronenm@il.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-07-12 07:49:49 -0400"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Provide backup service that uses ProtecTIER as the backend"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I63075f38e551af943a671664a8951614d1b3849f"},{"line_number":10,"context_line":"Implements: blueprint protectier-backup-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"9a41bdd9_c63c0232","line":7,"updated":"2015-07-12 13:42:08.000000000","message":"https://wiki.openstack.org/wiki/GitCommitMessages says \"The first line should be limited to 50 characters ...\"","commit_id":"e49b043206df5e7abdef50c97f6aff5dfb04fd00"},{"author":{"_account_id":16258,"name":"nikesh","email":"nike.niec@gmail.com","username":"nikem"},"change_message_id":"c56d607d8da5e14b4f81b0580ae1f8413974f8ab","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Ronen Mesonzhnik \u003cronenm@il.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-09-06 12:44:08 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add get_extra_metadata to nfs backup driver for backup import"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I63075f38e551af943a671664a8951614d1b3849f"},{"line_number":10,"context_line":"Implements: blueprint protectier-backup-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":26,"id":"da20952f_2929509b","line":7,"updated":"2015-09-06 13:49:23.000000000","message":"The first line should be limited to 50 characters\n\nProvide a detailed description too.\nhttps://wiki.openstack.org/wiki/GitCommitMessages","commit_id":"db7c4661aa6633bab870ef32d2e6abd03582ff40"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"9e2919801abfe5f92c6e5c8cd8563b223ff54692","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Ronen Mesonzhnik \u003cronenm@il.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-09-06 12:44:08 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add get_extra_metadata to nfs backup driver for backup import"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change-Id: I63075f38e551af943a671664a8951614d1b3849f"},{"line_number":10,"context_line":"Implements: blueprint protectier-backup-driver"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":26,"id":"da20952f_3f3d02c4","line":7,"in_reply_to":"da20952f_2929509b","updated":"2015-09-06 15:41:51.000000000","message":"+1","commit_id":"db7c4661aa6633bab870ef32d2e6abd03582ff40"}],"cinder/backup/chunkeddriver.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"77db8549bdec927de4ab2da66280c87728ea4ea1","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        Subclass extensions can use this extra information or override"},{"line_number":159,"context_line":"        this method."},{"line_number":160,"context_line":"        \"\"\""},{"line_number":161,"context_line":"        LOG.debug(\u0027get_extra_metadata\u0027)"},{"line_number":162,"context_line":"        self.backup_mgr \u003d importutils.import_object(CONF.backup_manager)"},{"line_number":163,"context_line":"        return {\u0027encode_record\u0027: backup.encode_record("},{"line_number":164,"context_line":"        ), \u0027driver_name\u0027: self.backup_mgr.driver_name}"}],"source_content_type":"text/x-python","patch_set":40,"id":"3afc51ec_4431d704","line":161,"updated":"2016-03-14 19:08:22.000000000","message":"Please, add backup and volume data to the log message","commit_id":"9d92e58bcde3d49fcbd4e530a8455d318370061a"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"d5517d15810d7f9b39547b22df01d2deb76364ba","unresolved":false,"context_lines":[{"line_number":3,"context_line":"# Copyright (c) 2015 EMC Corporation"},{"line_number":4,"context_line":"# Copyright (C) 2015 Kevin Fox \u003ckevin@efox.cc\u003e"},{"line_number":5,"context_line":"# Copyright (C) 2015 Tom Barron \u003ctpb@dyncloud.net\u003e"},{"line_number":6,"context_line":"# Copyright (C) 2016 Ronen Mesonzhnik \u003cronenm@il.ibm.com\u003e"},{"line_number":7,"context_line":"# All Rights Reserved."},{"line_number":8,"context_line":"#"},{"line_number":9,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":41,"id":"9a061dce_a6535c16","line":6,"updated":"2016-04-12 02:42:23.000000000","message":"It seems that other IBMers add \"IBM\" here instead of individual\u0027s name.  Are you sure this copyright should have your name instead of IBM?  Maybe something to check with your legal.  NetApp has a different situation where the employees were asked to use their name instead of the company\u0027s name here.","commit_id":"59435814698cf3b3bb92c2e7a9cfd6dd2b56248d"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"e8109a1f1920dc8c7dcc9bc1df863e9861c801be","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        \"\"\""},{"line_number":151,"context_line":"        return"},{"line_number":152,"context_line":""},{"line_number":153,"context_line":"    def get_extra_metadata(self, backup, volume):"},{"line_number":154,"context_line":"        \"\"\"Returns backup extra metadata."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":"        Extra metadata can be used for backup import on the replication"}],"source_content_type":"text/x-python","patch_set":42,"id":"1a122d0e_a2f1206d","line":153,"updated":"2016-04-21 13:41:40.000000000","message":"This is an abstract class that is overridden in the child classes. For drivers/google.py and drivers/swift.py, there is not metadata, so they just return.\nBy implementing this here, you are breaking the abc model and also you are implementing this for google and swift drivers, which is wrong.\nYou need to keep this abstract, and implement only in drivers/posix.py","commit_id":"ab2e62337fc4b6fc461cdc82663b4e00223e06a6"}],"cinder/backup/drivers/posix.py":[{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"9e2919801abfe5f92c6e5c8cd8563b223ff54692","unresolved":false,"context_lines":[{"line_number":57,"context_line":"               help\u003d\u0027Path specifying where to store backups.\u0027),"},{"line_number":58,"context_line":"    cfg.StrOpt(\u0027backup_container\u0027,"},{"line_number":59,"context_line":"               help\u003d\u0027Custom directory to use for backups.\u0027),"},{"line_number":60,"context_line":"    cfg.BoolOpt(\u0027backup_enable_extra_metadata\u0027,"},{"line_number":61,"context_line":"                default\u003dFalse,"},{"line_number":62,"context_line":"                help\u003d\u0027Enable or Disable extra metadata that \u0027"},{"line_number":63,"context_line":"                     \u0027can be used for backup import.\u0027),"}],"source_content_type":"text/x-python","patch_set":26,"id":"da20952f_7f1e1a60","line":60,"updated":"2015-09-06 15:41:51.000000000","message":"There could (and will be) other kinds of extra metadata.\n\nThe option and the metadata names should be specific to *this* kind of extra metadata and reflect its purpose.","commit_id":"db7c4661aa6633bab870ef32d2e6abd03582ff40"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"4508ef0add72ec401320a460bca71e3cf121e8ab","unresolved":false,"context_lines":[{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def get_extra_metadata(self, backup, volume):"},{"line_number":133,"context_line":"        return super(PosixBackupDriver, self).get_extra_metadata("},{"line_number":134,"context_line":"            backup, volume)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"def get_backup_driver(context):"}],"source_content_type":"text/x-python","patch_set":34,"id":"5a5ae5dd_a6b25fe3","line":134,"range":{"start_line":134,"start_character":12,"end_line":134,"end_character":18},"updated":"2016-02-07 14:12:42.000000000","message":"Since you changed the super method not to be abstract, you can just delete the method from the subclass","commit_id":"0b91e0acd7f158b2fe1c69ff5a3a5a5ba7bf7e96"},{"author":{"_account_id":7173,"name":"Scott DAngelo","email":"scott.dangelo@gmail.com","username":"scottda"},"change_message_id":"e8109a1f1920dc8c7dcc9bc1df863e9861c801be","unresolved":false,"context_lines":[{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def _generate_object_name_prefix(self, backup):"},{"line_number":130,"context_line":"        return \u0027backup\u0027"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"def get_backup_driver(context):"},{"line_number":134,"context_line":"    return PosixBackupDriver(context)"}],"source_content_type":"text/x-python","patch_set":42,"id":"1a122d0e_228510ad","line":131,"updated":"2016-04-21 13:41:40.000000000","message":"You should be implementing your changes here, instead of removing this.","commit_id":"ab2e62337fc4b6fc461cdc82663b4e00223e06a6"}],"cinder/backup/drivers/protectier.py":[{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"2f716903e9460d70621e767e22c873bbf3659cb0","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"**Related Flags**"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":":backup_object_size: The size in bytes of the objects used"},{"line_number":21,"context_line":"                                    for volume backups (default: 52428800)."},{"line_number":22,"context_line":":backup_pt_path: The path of PT backups. (default:"},{"line_number":23,"context_line":"                                    /openstack_volumes_backup/)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_609c3d5e","line":20,"updated":"2015-03-03 10:18:52.000000000","message":"Why not put the comment in config option registration cfg.IntOpt(...)?","commit_id":"9d64588b38f5c675f26861bbcba664d6667a01a8"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"2f716903e9460d70621e767e22c873bbf3659cb0","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":":backup_object_size: The size in bytes of the objects used"},{"line_number":21,"context_line":"                                    for volume backups (default: 52428800)."},{"line_number":22,"context_line":":backup_pt_path: The path of PT backups. (default:"},{"line_number":23,"context_line":"                                    /openstack_volumes_backup/)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"A prerequisite for using the IBM ProtecTIER backup service is configuring the"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_20bde5b7","line":22,"updated":"2015-03-03 10:18:52.000000000","message":"Same as above.","commit_id":"9d64588b38f5c675f26861bbcba664d6667a01a8"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"2f716903e9460d70621e767e22c873bbf3659cb0","unresolved":false,"context_lines":[{"line_number":61,"context_line":""},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"class ProtecTIERBackupDriver(driver.BackupDriver):"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    \"\"\"Provides backup, restore and delete of backup Volumes"},{"line_number":66,"context_line":"    using ProtecTIER."},{"line_number":67,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_25ced72e","line":64,"updated":"2015-03-03 10:18:52.000000000","message":"Extra blank line.","commit_id":"9d64588b38f5c675f26861bbcba664d6667a01a8"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"2f716903e9460d70621e767e22c873bbf3659cb0","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        self.data_block_size_bytes \u003d CONF.backup_object_size"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def _write_chunk_to_file(self, input_chunk, output_file):"},{"line_number":79,"context_line":"        \"\"\"Write data chunk to file\"\"\""},{"line_number":80,"context_line":"        with open(output_file, \u0027w\u0027) as output_file_obj:"},{"line_number":81,"context_line":"            output_file_obj.write(input_chunk)"},{"line_number":82,"context_line":"        LOG.debug(\u0027_write_chunk_to_file: %s\u0027, output_file)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_25f5f756","line":79,"updated":"2015-03-03 10:18:52.000000000","message":"I think this comment doesn\u0027t tell anything.","commit_id":"9d64588b38f5c675f26861bbcba664d6667a01a8"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"2f716903e9460d70621e767e22c873bbf3659cb0","unresolved":false,"context_lines":[{"line_number":125,"context_line":"                    six.text_type(err))"},{"line_number":126,"context_line":"        LOG.debug(\u0027_write_metadata finished\u0027)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def _read_metadata(self, backup):"},{"line_number":129,"context_line":"        \"\"\"Read metadata of a backup\"\"\""},{"line_number":130,"context_line":"        filename \u003d \u0027metadata\u0027"},{"line_number":131,"context_line":"        LOG.debug(\u0027_read_metadata started\u0027"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_00bc61db","line":128,"updated":"2015-03-03 10:18:52.000000000","message":"Is argument \u0027backup\u0027 unused?","commit_id":"9d64588b38f5c675f26861bbcba664d6667a01a8"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"2f716903e9460d70621e767e22c873bbf3659cb0","unresolved":false,"context_lines":[{"line_number":186,"context_line":"        object_name \u003d \u0027%s-%05d-from-%05d\u0027 % (object_prefix,"},{"line_number":187,"context_line":"                                             object_id,"},{"line_number":188,"context_line":"                                             self.number_of_chunks_in_volume)"},{"line_number":189,"context_line":"        obj \u003d {}"},{"line_number":190,"context_line":"        obj[object_name] \u003d {}"},{"line_number":191,"context_line":"        obj[object_name][\u0027offset\u0027] \u003d data_offset"},{"line_number":192,"context_line":"        obj[object_name][\u0027length\u0027] \u003d len(data)"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_002e2143","line":189,"updated":"2015-03-03 10:18:52.000000000","message":"Rewrite below to a dict literal?","commit_id":"9d64588b38f5c675f26861bbcba664d6667a01a8"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"2f716903e9460d70621e767e22c873bbf3659cb0","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        obj[object_name] \u003d {}"},{"line_number":191,"context_line":"        obj[object_name][\u0027offset\u0027] \u003d data_offset"},{"line_number":192,"context_line":"        obj[object_name][\u0027length\u0027] \u003d len(data)"},{"line_number":193,"context_line":"        LOG.debug(\u0027reading chunk of data from volume\u0027)"},{"line_number":194,"context_line":"        LOG.debug(\u0027not compressing data\u0027)"},{"line_number":195,"context_line":"        obj[object_name][\u0027compression\u0027] \u003d \u0027none\u0027"},{"line_number":196,"context_line":"        az \u003d \u0027az_%s\u0027 % self.az"}],"source_content_type":"text/x-python","patch_set":9,"id":"ba7be1f8_c017a9ec","line":193,"updated":"2015-03-03 10:18:52.000000000","message":"Add more details such as which volume is reading?","commit_id":"9d64588b38f5c675f26861bbcba664d6667a01a8"},{"author":{"_account_id":13900,"name":"Accela Zhao","email":"accelazh@gmail.com","username":"accelazh"},"change_message_id":"0d325325e307688f705e81242194412e22927be8","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"class ProtecTIERBackupDriver(driver.BackupDriver):"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    \"\"\"Provides backup, restore and delete of backup Volumes"},{"line_number":58,"context_line":"    using ProtecTIER."},{"line_number":59,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a80dd14_96b98d17","line":56,"updated":"2015-03-06 13:41:44.000000000","message":"Extra blank line.","commit_id":"b4b3ae7cb6d76c5d3eb03443878978bd576522ab"},{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"b1b9b44d21ec5b0ecf9de660948e9f3f9cbf8d15","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 IBM Corp"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aaa499b_53cdf85b","line":1,"updated":"2015-04-14 12:54:27.000000000","message":"should be 2015","commit_id":"0038f79623718edd5efedfec5067b93ab694594b"},{"author":{"_account_id":10213,"name":"Alon Marx","email":"alonma@il.ibm.com","username":"alonmarx"},"change_message_id":"b1b9b44d21ec5b0ecf9de660948e9f3f9cbf8d15","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"Implementation of a backup service that uses ProtecTIER as the backend."},{"line_number":17,"context_line":"A prerequisite for using the IBM ProtecTIER backup service is configuring the"},{"line_number":18,"context_line":"host for using ProtecTIER."},{"line_number":19,"context_line":"\"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"7aaa499b_33f38ca0","line":16,"updated":"2015-04-14 12:54:27.000000000","message":"Comment text should be in a separate line","commit_id":"0038f79623718edd5efedfec5067b93ab694594b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"316c3e104f4c88276eed22b9f842d322d7aaf44c","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            self._write_chunk_to_file("},{"line_number":113,"context_line":"                metadata_json, self.pt_object_dir + filename)"},{"line_number":114,"context_line":"        except IOError:"},{"line_number":115,"context_line":"            msg \u003d (\"Write metadata failed\")"},{"line_number":116,"context_line":"            LOG.error(msg)"},{"line_number":117,"context_line":"            raise exception.BackupOperationError(msg)"},{"line_number":118,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7aaa499b_c1c8fd24","line":115,"updated":"2015-04-14 20:19:01.000000000","message":"Need to be _() for translation.","commit_id":"0038f79623718edd5efedfec5067b93ab694594b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"316c3e104f4c88276eed22b9f842d322d7aaf44c","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        try:"},{"line_number":148,"context_line":"            os.makedirs(self.pt_object_dir)"},{"line_number":149,"context_line":"        except OSError:"},{"line_number":150,"context_line":"            msg \u003d (\"Can\u0027t prepare backup path %s\", self.pt_object_dir)"},{"line_number":151,"context_line":"            LOG.error(msg)"},{"line_number":152,"context_line":"            raise exception.BackupOperationError(msg)"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7aaa499b_41dd0ddf","line":150,"updated":"2015-04-14 20:19:01.000000000","message":"Needs _(). Also need to change , to % so the string actually gets formatted.","commit_id":"0038f79623718edd5efedfec5067b93ab694594b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"316c3e104f4c88276eed22b9f842d322d7aaf44c","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            os.makedirs(self.pt_object_dir)"},{"line_number":149,"context_line":"        except OSError:"},{"line_number":150,"context_line":"            msg \u003d (\"Can\u0027t prepare backup path %s\", self.pt_object_dir)"},{"line_number":151,"context_line":"            LOG.error(msg)"},{"line_number":152,"context_line":"            raise exception.BackupOperationError(msg)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        backup[\u0027service_metadata\u0027] \u003d object_prefix"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aaa499b_01e705b1","line":151,"updated":"2015-04-14 20:19:01.000000000","message":"May want to make this LOG.exception so the exception information gets logged as well.","commit_id":"0038f79623718edd5efedfec5067b93ab694594b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"316c3e104f4c88276eed22b9f842d322d7aaf44c","unresolved":false,"context_lines":[{"line_number":204,"context_line":"            self._write_chunk_to_file("},{"line_number":205,"context_line":"                data, self.pt_object_dir + output_file_name)"},{"line_number":206,"context_line":"        except IOError:"},{"line_number":207,"context_line":"            msg \u003d (\"Backup data chunk %s failed\", output_file_name)"},{"line_number":208,"context_line":"            LOG.error(msg)"},{"line_number":209,"context_line":"            raise exception.BackupOperationError(msg)"},{"line_number":210,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7aaa499b_c1bd9d69","line":207,"updated":"2015-04-14 20:19:01.000000000","message":"Put in _() and change , to %.","commit_id":"0038f79623718edd5efedfec5067b93ab694594b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"316c3e104f4c88276eed22b9f842d322d7aaf44c","unresolved":false,"context_lines":[{"line_number":256,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":257,"context_line":"                    LOG.exception("},{"line_number":258,"context_line":"                        _LE(\"Backup volume metadata to protectier failed: %s\"),"},{"line_number":259,"context_line":"                        six.text_type(err))"},{"line_number":260,"context_line":"                    self.delete(backup)"},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"        self._finalize_backup(backup, object_meta)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aaa499b_218681b9","line":259,"updated":"2015-04-14 20:19:01.000000000","message":"Remove err since LOG.exception will log the exception already. No need to do it twice.\n\nYou can also then remove \"as err\" from the except line.","commit_id":"0038f79623718edd5efedfec5067b93ab694594b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"316c3e104f4c88276eed22b9f842d322d7aaf44c","unresolved":false,"context_lines":[{"line_number":283,"context_line":"                              \u0027volume_id\u0027: volume_id,"},{"line_number":284,"context_line":"                          })"},{"line_number":285,"context_line":"            except IOError:"},{"line_number":286,"context_line":"                err \u003d _(\"Restore of %s aborted\"), backup_id"},{"line_number":287,"context_line":"                raise exception.InvalidBackup(reason\u003derr)"},{"line_number":288,"context_line":"            volume_file.flush()"},{"line_number":289,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7aaa499b_a1673124","line":286,"updated":"2015-04-14 20:19:01.000000000","message":"Change , to % to format the string.","commit_id":"0038f79623718edd5efedfec5067b93ab694594b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"316c3e104f4c88276eed22b9f842d322d7aaf44c","unresolved":false,"context_lines":[{"line_number":311,"context_line":"                \u0027volume_id\u0027: volume_id,"},{"line_number":312,"context_line":"                \u0027backup_id\u0027: backup_id,"},{"line_number":313,"context_line":"            })"},{"line_number":314,"context_line":"        self.pt_object_dir \u003d self.dir_for_volume_backup + \\"},{"line_number":315,"context_line":"            self._create_pt_object_name_dir(object_prefix)"},{"line_number":316,"context_line":"        try:"},{"line_number":317,"context_line":"            metadata \u003d self._read_metadata()"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aaa499b_c14b5d86","line":314,"updated":"2015-04-14 20:19:01.000000000","message":"It is preferred to wrap this in () to avoid the need for the \\ line continuation.","commit_id":"0038f79623718edd5efedfec5067b93ab694594b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"316c3e104f4c88276eed22b9f842d322d7aaf44c","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        try:"},{"line_number":317,"context_line":"            metadata \u003d self._read_metadata()"},{"line_number":318,"context_line":"        except IOError:"},{"line_number":319,"context_line":"            msg \u003d (\"Can not read metadata\")"},{"line_number":320,"context_line":"            LOG.error(msg)"},{"line_number":321,"context_line":"            raise exception.BackupOperationError(msg)"},{"line_number":322,"context_line":"        metadata_version \u003d metadata[\u0027version\u0027]"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aaa499b_81455571","line":319,"updated":"2015-04-14 20:19:01.000000000","message":"_()","commit_id":"0038f79623718edd5efedfec5067b93ab694594b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"316c3e104f4c88276eed22b9f842d322d7aaf44c","unresolved":false,"context_lines":[{"line_number":355,"context_line":"                              backup[\u0027service_metadata\u0027]))"},{"line_number":356,"context_line":""},{"line_number":357,"context_line":"        except Exception:"},{"line_number":358,"context_line":"            LOG.warn(_LW(\u0027Error while deleting backup %s\u0027), backup[\u0027id\u0027])"},{"line_number":359,"context_line":""},{"line_number":360,"context_line":"        LOG.debug(\u0027delete %s finished\u0027, backup[\u0027id\u0027])"},{"line_number":361,"context_line":""}],"source_content_type":"text/x-python","patch_set":13,"id":"7aaa499b_c1191d8a","line":358,"updated":"2015-04-14 20:19:01.000000000","message":"LOG.warn is deprecated. Please use LOG.warning.","commit_id":"0038f79623718edd5efedfec5067b93ab694594b"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"bcc5ba8ffda1170e54ebae625ee6f835f0d923ff","unresolved":false,"context_lines":[{"line_number":71,"context_line":"class Protectier(NFSBackupDriver):"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    \"\"\"Provides backup, restore, delete and disaster recovery service"},{"line_number":74,"context_line":"    using backup metadata import and ProtecTIER supplied repository."},{"line_number":75,"context_line":"    \"\"\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def get_extra_metadata(self, backup, volume):"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba3cc151_1e6fc1c4","line":74,"updated":"2015-07-09 14:48:50.000000000","message":"Please make this doc string conform to the guidelines at\n\nhttp://docs.openstack.org/developer/hacking/#Docstrings","commit_id":"66a5982dd40a3a414449fb7345458de0aaf11abb"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"bcc5ba8ffda1170e54ebae625ee6f835f0d923ff","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    using backup metadata import and ProtecTIER supplied repository."},{"line_number":75,"context_line":"    \"\"\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def get_extra_metadata(self, backup, volume):"},{"line_number":78,"context_line":"        LOG.debug(\"get_extra_metadata Protectier\")"},{"line_number":79,"context_line":"        container \u003d backup[\u0027container\u0027]"},{"line_number":80,"context_line":"        object_name \u003d backup[\u0027service_metadata\u0027]"}],"source_content_type":"text/x-python","patch_set":15,"id":"ba3cc151_53c1c2e2","line":77,"updated":"2015-07-09 14:48:50.000000000","message":"A doc string explaining what you are doing with this method\nwould be helpful as I don\u0027t think it\u0027s obvious and so far as\nI can see it\u0027s the only thing that drives the need for this\ndriver rather than just using the generic NFS backup driver.","commit_id":"66a5982dd40a3a414449fb7345458de0aaf11abb"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"bc0a2b7f4237a872a9dc35b9e4d7f3dc4efa1c90","unresolved":false,"context_lines":[{"line_number":71,"context_line":"class Protectier(NFSBackupDriver):"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    \"\"\"Provides backup, restore, delete and disaster recovery services"},{"line_number":74,"context_line":"    using ProtecTIER supplied repository."},{"line_number":75,"context_line":"    \"\"\""},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def get_extra_metadata(self, backup, volume):"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_86e27a9e","line":74,"updated":"2015-07-12 13:42:08.000000000","message":"Jul 9 10:48 AM\n\nPlease make this doc string conform to the guidelines at\n\nhttp://docs.openstack.org/developer/hacking/#Docstrings","commit_id":"e49b043206df5e7abdef50c97f6aff5dfb04fd00"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"bc0a2b7f4237a872a9dc35b9e4d7f3dc4efa1c90","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        \"\"\"Returns extra metadata that can be used for backup import"},{"line_number":79,"context_line":"        on the replication destination side for disaster recovery purpose,"},{"line_number":80,"context_line":"        and generate a file that will import that metadata when needed."},{"line_number":81,"context_line":"        \"\"\""},{"line_number":82,"context_line":"        LOG.debug(\"get_extra_metadata Protectier\")"},{"line_number":83,"context_line":"        container \u003d backup[\u0027container\u0027]"},{"line_number":84,"context_line":"        object_name \u003d backup[\u0027service_metadata\u0027]"}],"source_content_type":"text/x-python","patch_set":16,"id":"9a41bdd9_c6d882f2","line":81,"updated":"2015-07-12 13:42:08.000000000","message":"ditto","commit_id":"e49b043206df5e7abdef50c97f6aff5dfb04fd00"}],"cinder/backup/drivers/pt.py":[{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":66,"context_line":"    DRIVER_VERSION_MAPPING \u003d {\u00271.0.0\u0027: \u0027_protectier_restore_v1\u0027}"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def __init__(self, context, db_driver\u003dNone):"},{"line_number":69,"context_line":"        \"\"\"Constructor\"\"\""},{"line_number":70,"context_line":"        super(ProtecTIERBackupDriver, self).__init__(context, db_driver)"},{"line_number":71,"context_line":"        self.new_dir_for_volume_backup \u003d CONF.backup_pt_path"},{"line_number":72,"context_line":"        self.az \u003d CONF.storage_availability_zone"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_cb872a11","line":69,"updated":"2015-02-09 16:29:02.000000000","message":"No need to add this docstring","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":68,"context_line":"    def __init__(self, context, db_driver\u003dNone):"},{"line_number":69,"context_line":"        \"\"\"Constructor\"\"\""},{"line_number":70,"context_line":"        super(ProtecTIERBackupDriver, self).__init__(context, db_driver)"},{"line_number":71,"context_line":"        self.new_dir_for_volume_backup \u003d CONF.backup_pt_path"},{"line_number":72,"context_line":"        self.az \u003d CONF.storage_availability_zone"},{"line_number":73,"context_line":"        self.data_block_size_bytes \u003d CONF.backup_object_size"},{"line_number":74,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_abed96f1","line":71,"updated":"2015-02-09 16:29:02.000000000","message":"Do we really need prefix \u0027_new\u0027?","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":73,"context_line":"        self.data_block_size_bytes \u003d CONF.backup_object_size"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"    def _write_chunk_to_file(self, input_chunk, output_file):"},{"line_number":76,"context_line":"        \"\"\"write data chunk to file\"\"\""},{"line_number":77,"context_line":"        with open(output_file, \u0027w\u0027) as output_file_obj:"},{"line_number":78,"context_line":"            output_file_obj.write(input_chunk)"},{"line_number":79,"context_line":"            output_file_obj.close()"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_ab72f646","line":76,"updated":"2015-02-09 16:29:02.000000000","message":"Please, start comments with an upper-case letter","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":76,"context_line":"        \"\"\"write data chunk to file\"\"\""},{"line_number":77,"context_line":"        with open(output_file, \u0027w\u0027) as output_file_obj:"},{"line_number":78,"context_line":"            output_file_obj.write(input_chunk)"},{"line_number":79,"context_line":"            output_file_obj.close()"},{"line_number":80,"context_line":"        LOG.debug(\u0027_write_chunk_to_file: %s\u0027 % output_file)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _generate_protectier_object_name_prefix(self, backup):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_cbb56ad1","line":79,"updated":"2015-02-09 16:29:02.000000000","message":"No need to call \u0027close()\u0027 in \u0027with\u0027 statement","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":77,"context_line":"        with open(output_file, \u0027w\u0027) as output_file_obj:"},{"line_number":78,"context_line":"            output_file_obj.write(input_chunk)"},{"line_number":79,"context_line":"            output_file_obj.close()"},{"line_number":80,"context_line":"        LOG.debug(\u0027_write_chunk_to_file: %s\u0027 % output_file)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _generate_protectier_object_name_prefix(self, backup):"},{"line_number":83,"context_line":"        \"\"\"create name prefix for protectier objects\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_eb306ea0","line":80,"updated":"2015-02-09 16:29:02.000000000","message":"% \u003d\u003e ,","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        volume \u003d \u0027volume_%s\u0027 % (backup[\u0027volume_id\u0027])"},{"line_number":87,"context_line":"        timestamp \u003d timeutils.strtime(fmt\u003d\"%Y%m%d%H%M%S\")"},{"line_number":88,"context_line":"        prefix \u003d volume + \u0027/\u0027 + timestamp + \u0027/\u0027 + backup_name"},{"line_number":89,"context_line":"        LOG.debug(\u0027_generate_protectier_object_name_prefix: %s\u0027 % prefix)"},{"line_number":90,"context_line":"        return prefix"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def _create_pt_object_name_dir(self, protectier_object_name_prefix):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_abff56a9","line":89,"updated":"2015-02-09 16:29:02.000000000","message":"According to the Logging guidelines, please change % \u003d\u003e ,","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        \"\"\"create directory name from prefix\"\"\""},{"line_number":94,"context_line":"        temp_split \u003d protectier_object_name_prefix.split(\"/\")"},{"line_number":95,"context_line":"        prefix \u003d temp_split[0] + \"/\" + temp_split[1] + \"/\""},{"line_number":96,"context_line":"        LOG.debug(\u0027_create_pt_object_name_dir: %s\u0027 % prefix)"},{"line_number":97,"context_line":"        return prefix"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def _write_metadata(self, backup, volume_id, object_list,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_0bb4e2f0","line":96,"updated":"2015-02-09 16:29:02.000000000","message":"% \u003d\u003e ,","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        \"\"\"save metadata of a backup\"\"\""},{"line_number":102,"context_line":"        filename \u003d \u0027metadata\u0027"},{"line_number":103,"context_line":"        LOG.debug(\u0027_write_metadata started\u0027"},{"line_number":104,"context_line":"                  \u0027 metadata filename: %(filename)s\u0027 %"},{"line_number":105,"context_line":"                  {\u0027filename\u0027: filename})"},{"line_number":106,"context_line":"        metadata \u003d {}"},{"line_number":107,"context_line":"        metadata[\u0027version\u0027] \u003d self.DRIVER_VERSION"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_cba00aa8","line":104,"updated":"2015-02-09 16:29:02.000000000","message":"% \u003d\u003e ,","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":120,"context_line":"        \"\"\"read metadata of a backup\"\"\""},{"line_number":121,"context_line":"        filename \u003d \u0027metadata\u0027"},{"line_number":122,"context_line":"        LOG.debug(\u0027_read_metadata started\u0027"},{"line_number":123,"context_line":"                  \u0027metadata filename: %(filename)s\u0027 %"},{"line_number":124,"context_line":"                  {\u0027filename\u0027: filename})"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        with open(self.pt_object_dir + filename, \u0027r\u0027) \\"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_2bb526cd","line":123,"updated":"2015-02-09 16:29:02.000000000","message":"% \u003d\u003e ,","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":152,"context_line":"            \u0027starting backup of volume: %(volume_id)s to protectier,\u0027"},{"line_number":153,"context_line":"            \u0027 volume size: %(volume_size_bytes)d, protectier object names\u0027"},{"line_number":154,"context_line":"            \u0027 prefix %(object_prefix)s, availability zone:\u0027"},{"line_number":155,"context_line":"            \u0027 %(availability_zone)s\u0027 % {"},{"line_number":156,"context_line":"                \u0027volume_id\u0027: volume_id,"},{"line_number":157,"context_line":"                \u0027volume_size_bytes\u0027: volume_size_bytes,"},{"line_number":158,"context_line":"                \u0027object_prefix\u0027: object_prefix,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_abc0362b","line":155,"updated":"2015-02-09 16:29:02.000000000","message":"% \u003d\u003e ,","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        try:"},{"line_number":183,"context_line":"            self._write_chunk_to_file("},{"line_number":184,"context_line":"                data, self.pt_object_dir + output_file_name)"},{"line_number":185,"context_line":"        except Exception as err:"},{"line_number":186,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":187,"context_line":"                LOG.exception("},{"line_number":188,"context_line":"                    _(\"Backup data chunk failed: %s\") %"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_cb03aa74","line":185,"updated":"2015-02-09 16:29:02.000000000","message":"Too general exception is handled","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":185,"context_line":"        except Exception as err:"},{"line_number":186,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":187,"context_line":"                LOG.exception("},{"line_number":188,"context_line":"                    _(\"Backup data chunk failed: %s\") %"},{"line_number":189,"context_line":"                    six.text_type(err))"},{"line_number":190,"context_line":"        md5 \u003d hashlib.md5(data).hexdigest()"},{"line_number":191,"context_line":"        obj[object_name][\u0027md5\u0027] \u003d md5"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_cb11eab0","line":188,"updated":"2015-02-09 16:29:02.000000000","message":"% \u003d\u003e ,","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":206,"context_line":"                                 backup[\u0027volume_id\u0027],"},{"line_number":207,"context_line":"                                 object_list,"},{"line_number":208,"context_line":"                                 volume_meta)"},{"line_number":209,"context_line":"        except Exception as err:"},{"line_number":210,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":211,"context_line":"                LOG.exception("},{"line_number":212,"context_line":"                    _(\"Finalize the backup failed: %s\") %"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_4b25fa08","line":209,"updated":"2015-02-09 16:29:02.000000000","message":"Same here","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":209,"context_line":"        except Exception as err:"},{"line_number":210,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":211,"context_line":"                LOG.exception("},{"line_number":212,"context_line":"                    _(\"Finalize the backup failed: %s\") %"},{"line_number":213,"context_line":"                    six.text_type(err))"},{"line_number":214,"context_line":"        self.db.backup_update(self.context, backup[\u0027id\u0027],"},{"line_number":215,"context_line":"                              {\u0027object_count\u0027: object_id})"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_8b1ff2b6","line":212,"updated":"2015-02-09 16:29:02.000000000","message":"% \u003d\u003e ,","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":212,"context_line":"                    _(\"Finalize the backup failed: %s\") %"},{"line_number":213,"context_line":"                    six.text_type(err))"},{"line_number":214,"context_line":"        self.db.backup_update(self.context, backup[\u0027id\u0027],"},{"line_number":215,"context_line":"                              {\u0027object_count\u0027: object_id})"},{"line_number":216,"context_line":"        LOG.debug(\u0027backup %s finished.\u0027 % backup[\u0027id\u0027])"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    def _backup_metadata(self, backup, object_meta):"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_2b88c6e6","line":215,"updated":"2015-02-09 16:29:02.000000000","message":"% \u003d\u003e ,","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":239,"context_line":"        if backup_metadata:"},{"line_number":240,"context_line":"            try:"},{"line_number":241,"context_line":"                self._backup_metadata(backup, object_meta)"},{"line_number":242,"context_line":"            except Exception as err:"},{"line_number":243,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":244,"context_line":"                    LOG.exception("},{"line_number":245,"context_line":"                        _(\"Backup volume metadata to protectier failed: %s\") %"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_8b761205","line":242,"updated":"2015-02-09 16:29:02.000000000","message":"And here","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":242,"context_line":"            except Exception as err:"},{"line_number":243,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":244,"context_line":"                    LOG.exception("},{"line_number":245,"context_line":"                        _(\"Backup volume metadata to protectier failed: %s\") %"},{"line_number":246,"context_line":"                        six.text_type(err))"},{"line_number":247,"context_line":"                    self.delete(backup)"},{"line_number":248,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_4b6c1a37","line":245,"updated":"2015-02-09 16:29:02.000000000","message":"% \u003d\u003e ,","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":264,"context_line":"                          \u0027%(backup_id)s, \u0027"},{"line_number":265,"context_line":"                          \u0027protectier object name: \u0027"},{"line_number":266,"context_line":"                          \u0027%(object_name)s, volume: %(volume_id)s\u0027 %"},{"line_number":267,"context_line":"                          {"},{"line_number":268,"context_line":"                              \u0027backup_id\u0027: backup_id,"},{"line_number":269,"context_line":"                              \u0027object_name\u0027: object_name,"},{"line_number":270,"context_line":"                              \u0027volume_id\u0027: volume_id,"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_ab73d613","line":267,"updated":"2015-02-09 16:29:02.000000000","message":"% \u003d\u003e ,","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":296,"context_line":"            \u0027starting restore of backup %(object_prefix)s from protectier\u0027"},{"line_number":297,"context_line":"            \u0027to volume %(volume_id)s, \u0027"},{"line_number":298,"context_line":"            \u0027backup: %(backup_id)s\u0027 % {"},{"line_number":299,"context_line":"                \u0027object_prefix\u0027: object_prefix,"},{"line_number":300,"context_line":"                \u0027volume_id\u0027: volume_id,"},{"line_number":301,"context_line":"                \u0027backup_id\u0027: backup_id,"},{"line_number":302,"context_line":"            })"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_8b4d32c7","line":299,"updated":"2015-02-09 16:29:02.000000000","message":"% \u003d\u003e ,","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":305,"context_line":"        try:"},{"line_number":306,"context_line":"            metadata \u003d self._read_metadata(backup)"},{"line_number":307,"context_line":"        except Exception as err:"},{"line_number":308,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":309,"context_line":"                LOG.exception("},{"line_number":310,"context_line":"                    _(\"Can not read metadata: %s\") %"},{"line_number":311,"context_line":"                    six.text_type(err))"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_4b533a6c","line":308,"updated":"2015-02-09 16:29:02.000000000","message":"And here","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":307,"context_line":"        except Exception as err:"},{"line_number":308,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":309,"context_line":"                LOG.exception("},{"line_number":310,"context_line":"                    _(\"Can not read metadata: %s\") %"},{"line_number":311,"context_line":"                    six.text_type(err))"},{"line_number":312,"context_line":"        metadata_version \u003d metadata[\u0027version\u0027]"},{"line_number":313,"context_line":"        LOG.debug(\u0027Restoring protectier backup version %s\u0027, metadata_version)"}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_6b50fe5e","line":310,"updated":"2015-02-09 16:29:02.000000000","message":"% \u003d\u003e ,","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":332,"context_line":"            raise exception.BackupOperationError(msg)"},{"line_number":333,"context_line":""},{"line_number":334,"context_line":"        LOG.debug(\u0027restore %(backup_id)s to %(volume_id)s finished.\u0027 %"},{"line_number":335,"context_line":"                  {\u0027backup_id\u0027: backup_id, \u0027volume_id\u0027: volume_id})"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"    def delete(self, backup):"},{"line_number":338,"context_line":"        \"\"\"Delete the given backup from protectier.\"\"\""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_cbc64a16","line":335,"updated":"2015-02-09 16:29:02.000000000","message":"% \u003d\u003e ,","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"c3a094657159c16aa715401ff27d010ba3c556ea","unresolved":false,"context_lines":[{"line_number":348,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":349,"context_line":"                LOG.exception("},{"line_number":350,"context_line":"                    _(\"Delete of a backup failed: %s\") %"},{"line_number":351,"context_line":"                    six.text_type(err))"},{"line_number":352,"context_line":""},{"line_number":353,"context_line":"        LOG.debug(\u0027delete %s finished\u0027 % backup[\u0027id\u0027])"},{"line_number":354,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da86d52c_0bd142cd","line":351,"updated":"2015-02-09 16:29:02.000000000","message":"% \u003d\u003e ,","commit_id":"ffc6a1b925a295eecd209506eb7c60137d14bf8b"}],"cinder/tests/test_backup_protectier.py":[{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"316c3e104f4c88276eed22b9f842d322d7aaf44c","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        self.ctxt.project_id \u003d \"12345678\""},{"line_number":79,"context_line":"        self.override_config(\"backup_pt_path\", \"/some_path/\")"},{"line_number":80,"context_line":"        backup \u003d protectier.ProtecTIERBackupDriver(self.ctxt)"},{"line_number":81,"context_line":"        self.assertEqual(\"%s\" % CONF.backup_pt_path,"},{"line_number":82,"context_line":"                         backup.dir_for_volume_backup)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def test_backup(self):"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aaa499b_a42a9f7c","line":81,"updated":"2015-04-14 20:19:01.000000000","message":"String formatting doesn\u0027t appear to be necessary here.","commit_id":"0038f79623718edd5efedfec5067b93ab694594b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"316c3e104f4c88276eed22b9f842d322d7aaf44c","unresolved":false,"context_lines":[{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        def fake_backup_metadata(self, backup, object_meta):"},{"line_number":98,"context_line":"            raise exception.BackupDriverException("},{"line_number":99,"context_line":"                message\u003d_(\u0027fake_backup_metadata\u0027))"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        self.stubs.Set(protectier.ProtecTIERBackupDriver, \u0027_backup_metadata\u0027,"},{"line_number":102,"context_line":"                       fake_backup_metadata)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aaa499b_645b772f","line":99,"updated":"2015-04-14 20:19:01.000000000","message":"No need to make the translators translate you UT strings. Remove _() from the string.","commit_id":"0038f79623718edd5efedfec5067b93ab694594b"},{"author":{"_account_id":11904,"name":"Sean McGinnis","email":"sean.mcginnis@gmail.com","username":"SeanM"},"change_message_id":"316c3e104f4c88276eed22b9f842d322d7aaf44c","unresolved":false,"context_lines":[{"line_number":113,"context_line":""},{"line_number":114,"context_line":"        def fake_backup_metadata(self, backup, object_meta):"},{"line_number":115,"context_line":"            raise exception.BackupDriverException("},{"line_number":116,"context_line":"                message\u003d_(\u0027fake_backup_metadata\u0027))"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"        self.stubs.Set(protectier.ProtecTIERBackupDriver, \u0027_backup_metadata\u0027,"},{"line_number":119,"context_line":"                       fake_backup_metadata)"}],"source_content_type":"text/x-python","patch_set":13,"id":"7aaa499b_044dd36b","line":116,"updated":"2015-04-14 20:19:01.000000000","message":"Remove _().","commit_id":"0038f79623718edd5efedfec5067b93ab694594b"}],"cinder/tests/unit/backup/drivers/test_backup_nfs.py":[{"author":{"_account_id":17151,"name":"chenying","email":"chenyingko@gmail.com","username":"chenying"},"change_message_id":"49338acedf721562d2bd5f8d4bf63222e0de579c","unresolved":false,"context_lines":[{"line_number":616,"context_line":"        self.stubs.Set(nfs.NFSBackupDriver, \u0027get_extra_metadata\u0027,"},{"line_number":617,"context_line":"                       fake_extra_metadata)"},{"line_number":618,"context_line":"        result \u003d service.get_extra_metadata(backup, self.volume_file)"},{"line_number":619,"context_line":"        self.assertEqual(result, FAKE_EXTRA_METADATA)"}],"source_content_type":"text/x-python","patch_set":26,"id":"da20952f_a84795ba","line":619,"updated":"2015-09-07 01:50:33.000000000","message":"Argument order should be (expected, actual). FAKE_EXTRA_METADATA should be first.","commit_id":"db7c4661aa6633bab870ef32d2e6abd03582ff40"}]}
