)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14123,"name":"Stefano Canepa","email":"sc@linux.it","username":"sc"},"change_message_id":"6957cf1363ec24237154dd08763f711156767a0a","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     eldar nugaev \u003celdar.nugaev@hp.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-08-21 17:20:52 +0100"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"First iteration of multiple storges."},{"line_number":8,"context_line":"Unification storages and extraction backup engine."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"Implements : blueprint multiple-storage-backup-restore"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa1b9901_039f54b5","line":7,"updated":"2015-08-21 16:37:45.000000000","message":"storages","commit_id":"958c22cfbc9fe0635e45ff85e1a00af93f9066a2"}],"freezer/engine/engine.py":[{"author":{"_account_id":14123,"name":"Stefano Canepa","email":"sc@linux.it","username":"sc"},"change_message_id":"6957cf1363ec24237154dd08763f711156767a0a","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import logging"},{"line_number":2,"context_line":"import os"},{"line_number":3,"context_line":"import errno"},{"line_number":4,"context_line":""},{"line_number":5,"context_line":"from freezer import streaming"},{"line_number":6,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_03ed1425","line":3,"updated":"2015-08-21 16:37:45.000000000","message":"correct order is:\nimport errno\nimport logging\nimport os","commit_id":"958c22cfbc9fe0635e45ff85e1a00af93f9066a2"},{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"819110eaa4f1750a0d4a3106165300a4fff18532","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import logging"},{"line_number":2,"context_line":"import os"},{"line_number":3,"context_line":"import errno"},{"line_number":4,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_4aeac310","line":1,"updated":"2015-08-25 15:18:53.000000000","message":"We need to add the license and HP Copyright.","commit_id":"1be6af5ae57c504b089520e83bade74eb7b7bf28"},{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"819110eaa4f1750a0d4a3106165300a4fff18532","unresolved":false,"context_lines":[{"line_number":15,"context_line":"        raise NotImplementedError(\"Should have implemented this\")"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"    def backup_stream(self, postman, stop_queue, manifest_path,"},{"line_number":18,"context_line":"                      chunk_size\u003d1000000):"},{"line_number":19,"context_line":"        \"\"\""},{"line_number":20,"context_line":"        :param postman:"},{"line_number":21,"context_line":"        :type postman: freezer.streaming.PostMan"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_22121963","line":18,"updated":"2015-08-25 15:18:53.000000000","message":"looks like 1000000 is always passed to chunk_size, wouldn\u0027t be better to use a constant and set chunk_size to default to that constant?","commit_id":"1be6af5ae57c504b089520e83bade74eb7b7bf28"},{"author":{"_account_id":14340,"name":"Memo Garcia","email":"guillermo.ramirez-garcia@hp.com","username":"memogarcia"},"change_message_id":"2bf1defa0a4788337437ec02c974b8135a20078a","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    def backup(self, backup_path, backup, chunk_size\u003d1000000):"},{"line_number":52,"context_line":"        \"\"\""},{"line_number":53,"context_line":"        Here we now location of all interesting artifacts like metadata"},{"line_number":54,"context_line":"        Should return stream for storing data."},{"line_number":55,"context_line":"        :return: stream"},{"line_number":56,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"da20952f_852493af","line":53,"updated":"2015-09-02 13:55:58.000000000","message":"description should be cleaner and more readable","commit_id":"e1a49565ba14df1e73b36ed4ba150cdae18610f9"}],"freezer/engine/tar_engine.py":[{"author":{"_account_id":14123,"name":"Stefano Canepa","email":"sc@linux.it","username":"sc"},"change_message_id":"6957cf1363ec24237154dd08763f711156767a0a","unresolved":false,"context_lines":[{"line_number":3,"context_line":"import os"},{"line_number":4,"context_line":"import subprocess"},{"line_number":5,"context_line":"import logging"},{"line_number":6,"context_line":"from freezer import streaming"},{"line_number":7,"context_line":""},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"class TarBackupEngine(engine.BackupEngine):"}],"source_content_type":"text/x-python","patch_set":5,"id":"fa1b9901_43e30c34","line":6,"updated":"2015-08-21 16:37:45.000000000","message":"import order again","commit_id":"958c22cfbc9fe0635e45ff85e1a00af93f9066a2"},{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"819110eaa4f1750a0d4a3106165300a4fff18532","unresolved":false,"context_lines":[{"line_number":33,"context_line":"        self.main_storage.upload_meta_file(backup, manifest)"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def backup_stream(self, backup_path, postman, manifest_path,"},{"line_number":36,"context_line":"                      chunk_size\u003d100000000):"},{"line_number":37,"context_line":"        logging.info(\"Tar engine backup stream enter\")"},{"line_number":38,"context_line":"        tar_command \u003d tar.TarCommandBuilder("},{"line_number":39,"context_line":"            self.gnutar_path, backup_path, self.compression_algo)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_5d829253","line":36,"updated":"2015-08-25 15:18:53.000000000","message":"may be ~100M is a bit too high value for a default?","commit_id":"1be6af5ae57c504b089520e83bade74eb7b7bf28"},{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"819110eaa4f1750a0d4a3106165300a4fff18532","unresolved":false,"context_lines":[{"line_number":52,"context_line":"            command, stdout\u003dsubprocess.PIPE,"},{"line_number":53,"context_line":"            stderr\u003dsubprocess.PIPE, shell\u003dTrue)"},{"line_number":54,"context_line":"        # Iterate over tar process stdout"},{"line_number":55,"context_line":"        streaming.non_block(tar_process.stderr)"},{"line_number":56,"context_line":"        while True:"},{"line_number":57,"context_line":"            logging.info(\"Tar backup reading chunk\")"},{"line_number":58,"context_line":"            tar_chunk \u003d tar_process.stdout.read(chunk_size)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_1d0f3ae2","line":55,"updated":"2015-08-25 15:18:53.000000000","message":"What about\n\ntar_chunk \u003d tar_process.stdout.read(chunk_size)\nwhile tar_chunk:\n    ......\n    ......\n    tar_chunk \u003d tar_process.stdout.read(chunk_size)\n\nYou would save one check per chunk size iteration.","commit_id":"1be6af5ae57c504b089520e83bade74eb7b7bf28"},{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"819110eaa4f1750a0d4a3106165300a4fff18532","unresolved":false,"context_lines":[{"line_number":60,"context_line":"                break"},{"line_number":61,"context_line":"            try:"},{"line_number":62,"context_line":"                if tar_process.stderr.read():"},{"line_number":63,"context_line":"                    raise Exception(\"error during tar backup\")"},{"line_number":64,"context_line":"            except IOError:"},{"line_number":65,"context_line":"                pass"},{"line_number":66,"context_line":"            if len(tar_chunk):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_9d034ab8","line":63,"updated":"2015-08-25 15:18:53.000000000","message":"I think would be helpful here to include in the log the error message from tar","commit_id":"1be6af5ae57c504b089520e83bade74eb7b7bf28"},{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"819110eaa4f1750a0d4a3106165300a4fff18532","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                    raise Exception(\"error during tar backup\")"},{"line_number":64,"context_line":"            except IOError:"},{"line_number":65,"context_line":"                pass"},{"line_number":66,"context_line":"            if len(tar_chunk):"},{"line_number":67,"context_line":"                logging.info(\"Tar backup put chunk\")"},{"line_number":68,"context_line":"                postman.put(tar_chunk)"},{"line_number":69,"context_line":"        postman.finish()"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_3d9c7e5c","line":66,"updated":"2015-08-25 15:18:53.000000000","message":"I think this while loop needs to be refactored...","commit_id":"1be6af5ae57c504b089520e83bade74eb7b7bf28"},{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"819110eaa4f1750a0d4a3106165300a4fff18532","unresolved":false,"context_lines":[{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        tar_process \u003d subprocess.Popen("},{"line_number":103,"context_line":"            command, stdin\u003dsubprocess.PIPE, stdout\u003dsubprocess.PIPE,"},{"line_number":104,"context_line":"            stderr\u003dsubprocess.PIPE, shell\u003dTrue)"},{"line_number":105,"context_line":"        streaming.non_block(tar_process.stderr)"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"        for message in postman.messages():"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_dd3f8223","line":104,"updated":"2015-08-25 15:18:53.000000000","message":"Just a thought:\n\ncan we avoid to use shell\u003dTrue in subprocess?","commit_id":"1be6af5ae57c504b089520e83bade74eb7b7bf28"},{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"819110eaa4f1750a0d4a3106165300a4fff18532","unresolved":false,"context_lines":[{"line_number":108,"context_line":"            logging.info(\"Tar restore writing chunk\")"},{"line_number":109,"context_line":"            try:"},{"line_number":110,"context_line":"                if tar_process.stderr.read():"},{"line_number":111,"context_line":"                    raise Exception(\"error during tar restore\")"},{"line_number":112,"context_line":"            except IOError:"},{"line_number":113,"context_line":"                pass"},{"line_number":114,"context_line":"            tar_process.stdin.write(message)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_5d7932fb","line":111,"updated":"2015-08-25 15:18:53.000000000","message":"same here would be good to log the tar error.","commit_id":"1be6af5ae57c504b089520e83bade74eb7b7bf28"},{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"819110eaa4f1750a0d4a3106165300a4fff18532","unresolved":false,"context_lines":[{"line_number":112,"context_line":"            except IOError:"},{"line_number":113,"context_line":"                pass"},{"line_number":114,"context_line":"            tar_process.stdin.write(message)"},{"line_number":115,"context_line":"            logging.info(\"Tar restore wrote chunk\")"},{"line_number":116,"context_line":"        logging.info(\"Tar restore successfully finished\")"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def post_restore(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_fdfda63b","line":115,"updated":"2015-08-25 15:18:53.000000000","message":"Is this same message going to be written in the logs for every chunk? Probably to make more sense should provide the amount of data written or not log the same line every time?","commit_id":"1be6af5ae57c504b089520e83bade74eb7b7bf28"},{"author":{"_account_id":14340,"name":"Memo Garcia","email":"guillermo.ramirez-garcia@hp.com","username":"memogarcia"},"change_message_id":"2bf1defa0a4788337437ec02c974b8135a20078a","unresolved":false,"context_lines":[{"line_number":29,"context_line":"from freezer import streaming"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class TarBackupEngine(engine.BackupEngine):"},{"line_number":33,"context_line":"    DEFAULT_CHUNK_SIZE \u003d 20000000"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"    def __init__("}],"source_content_type":"text/x-python","patch_set":11,"id":"da20952f_008dd17a","line":32,"updated":"2015-09-02 13:55:58.000000000","message":"we should have a description of the class and the same for the functions","commit_id":"e1a49565ba14df1e73b36ed4ba150cdae18610f9"},{"author":{"_account_id":12211,"name":"Fabrizio Fresco","email":"fabrizio.fresco@hp.com","username":"frescof"},"change_message_id":"1f3a53c2a64652be70c7f647e6f67c9c122bc0d2","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                    success \u003d True"},{"line_number":150,"context_line":"                except IOError:"},{"line_number":151,"context_line":"                    if not rich_queue.is_force_stop and not tar_process.poll():"},{"line_number":152,"context_line":"                        time.sleep(1)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"        tar_out, tar_err \u003d tar_process.communicate()"},{"line_number":155,"context_line":"        if tar_err:"}],"source_content_type":"text/x-python","patch_set":14,"id":"ba15a1d1_402c494a","line":152,"updated":"2015-09-14 16:44:37.000000000","message":"Isn\u0027t better to use pool(1) here ? sleep() should be avoided when possible.","commit_id":"5ac7ee8bad7b3f3b14aabadc99e7917e24732f98"}],"freezer/local.py":[{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"819110eaa4f1750a0d4a3106165300a4fff18532","unresolved":false,"context_lines":[{"line_number":99,"context_line":"        :return:"},{"line_number":100,"context_line":"        \"\"\""},{"line_number":101,"context_line":"        return \"{}{}{}\".format(self._backup_dir(backup), os.sep,"},{"line_number":102,"context_line":"                               backup.timestamp)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def is_ready(self):"},{"line_number":105,"context_line":"        return os.path.isdir(self.storage_directory)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_9d06ea1e","line":102,"updated":"2015-08-25 15:18:53.000000000","message":"if here you can se the numbers as previously done i.we \"{0}{1}{2}\".format(..) this would be supported also by python 2.6","commit_id":"1be6af5ae57c504b089520e83bade74eb7b7bf28"},{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"819110eaa4f1750a0d4a3106165300a4fff18532","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        :type backup: SwiftBackup"},{"line_number":124,"context_line":"        \"\"\""},{"line_number":125,"context_line":"        filename \u003d self.backup_to_file_path(backup)"},{"line_number":126,"context_line":"        logging.info(\"Local storage write backup enter\")"},{"line_number":127,"context_line":"        if backup.level \u003d\u003d 0:"},{"line_number":128,"context_line":"            os.makedirs(os.path.dirname(filename))"},{"line_number":129,"context_line":"        with io.open(filename, \u0027wb\u0027, buffering\u003dchunk_size) as b_file:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_d83a30cd","line":126,"updated":"2015-08-25 15:18:53.000000000","message":"Probably this log message should be a bit more clear?","commit_id":"1be6af5ae57c504b089520e83bade74eb7b7bf28"},{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"819110eaa4f1750a0d4a3106165300a4fff18532","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        with io.open(filename, \u0027wb\u0027, buffering\u003dchunk_size) as b_file:"},{"line_number":130,"context_line":"            logging.info(\"Local storage write backup getting chunk\")"},{"line_number":131,"context_line":"            for message in postman.messages():"},{"line_number":132,"context_line":"                logging.info(\"Local storage write backup writing chunk\")"},{"line_number":133,"context_line":"                b_file.write(message)"},{"line_number":134,"context_line":"                logging.info(\"Local storage write backup getting chunk\")"},{"line_number":135,"context_line":"            b_file.flush()"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_78852457","line":132,"updated":"2015-08-25 15:18:53.000000000","message":"If we want to add log here, probably we should also add the iteration number, otherwise the log message wouldn\u0027t be of great help. If this would be the case I think enumerate() can help you.","commit_id":"1be6af5ae57c504b089520e83bade74eb7b7bf28"},{"author":{"_account_id":14340,"name":"Memo Garcia","email":"guillermo.ramirez-garcia@hp.com","username":"memogarcia"},"change_message_id":"2bf1defa0a4788337437ec02c974b8135a20078a","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        backup_names \u003d os.listdir(self.storage_directory)"},{"line_number":70,"context_line":"        backups \u003d []"},{"line_number":71,"context_line":"        for backup_name in backup_names:"},{"line_number":72,"context_line":"            backup_dir \u003d self.storage_directory + \"/\" + backup_name"},{"line_number":73,"context_line":"            timestamps \u003d os.listdir(backup_dir)"},{"line_number":74,"context_line":"            for timestamp in timestamps:"},{"line_number":75,"context_line":"                increments \u003d os.listdir(backup_dir + \"/\" + timestamp)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da20952f_e0e69d43","line":72,"updated":"2015-09-02 13:55:58.000000000","message":"we should use os.sep","commit_id":"e1a49565ba14df1e73b36ed4ba150cdae18610f9"},{"author":{"_account_id":14340,"name":"Memo Garcia","email":"guillermo.ramirez-garcia@hp.com","username":"memogarcia"},"change_message_id":"2bf1defa0a4788337437ec02c974b8135a20078a","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            backup_dir \u003d self.storage_directory + \"/\" + backup_name"},{"line_number":73,"context_line":"            timestamps \u003d os.listdir(backup_dir)"},{"line_number":74,"context_line":"            for timestamp in timestamps:"},{"line_number":75,"context_line":"                increments \u003d os.listdir(backup_dir + \"/\" + timestamp)"},{"line_number":76,"context_line":"                backups.extend(storage.Backup.parse_backups(increments))"},{"line_number":77,"context_line":"        return backups"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da20952f_00e4f138","line":75,"updated":"2015-09-02 13:55:58.000000000","message":"we should use os.sep","commit_id":"e1a49565ba14df1e73b36ed4ba150cdae18610f9"}],"freezer/main.py":[{"author":{"_account_id":14509,"name":"Pierre Mathieu","email":"pierre-arthur.mathieu@hpe.com","username":"slashme"},"change_message_id":"c4f234f7f33bb2ec34ffa6fc28de4fcdb13c4596","unresolved":false,"context_lines":[{"line_number":24,"context_line":"import subprocess"},{"line_number":25,"context_line":"import logging"},{"line_number":26,"context_line":"import sys"},{"line_number":27,"context_line":"import json"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from freezer.bandwidth import monkeypatch_socket_bandwidth"},{"line_number":30,"context_line":"from freezer import job"}],"source_content_type":"text/x-python","patch_set":11,"id":"da20952f_61adae87","line":27,"updated":"2015-09-02 15:17:13.000000000","message":"This should be in alphabetical order","commit_id":"e1a49565ba14df1e73b36ed4ba150cdae18610f9"}],"freezer/ssh.py":[{"author":{"_account_id":14509,"name":"Pierre Mathieu","email":"pierre-arthur.mathieu@hpe.com","username":"slashme"},"change_message_id":"c4f234f7f33bb2ec34ffa6fc28de4fcdb13c4596","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"import os"},{"line_number":22,"context_line":"import stat"},{"line_number":23,"context_line":"import logging"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"import paramiko"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"da20952f_a1cae64d","line":23,"updated":"2015-09-02 15:17:13.000000000","message":"This should be in alphabetical order","commit_id":"e1a49565ba14df1e73b36ed4ba150cdae18610f9"},{"author":{"_account_id":14340,"name":"Memo Garcia","email":"guillermo.ramirez-garcia@hp.com","username":"memogarcia"},"change_message_id":"2bf1defa0a4788337437ec02c974b8135a20078a","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        backup_names \u003d self.ftp.listdir(self.storage_directory)"},{"line_number":63,"context_line":"        backups \u003d []"},{"line_number":64,"context_line":"        for backup_name in backup_names:"},{"line_number":65,"context_line":"            backup_dir \u003d self.storage_directory + \"/\" + backup_name"},{"line_number":66,"context_line":"            timestamps \u003d self.ftp.listdir(backup_dir)"},{"line_number":67,"context_line":"            for timestamp in timestamps:"},{"line_number":68,"context_line":"                increments \u003d self.ftp.listdir(backup_dir + \"/\" + timestamp)"}],"source_content_type":"text/x-python","patch_set":11,"id":"da20952f_80cec1b2","line":65,"updated":"2015-09-02 13:55:58.000000000","message":"we should use os.sep","commit_id":"e1a49565ba14df1e73b36ed4ba150cdae18610f9"}],"freezer/storage.py":[{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"819110eaa4f1750a0d4a3106165300a4fff18532","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        :return:"},{"line_number":50,"context_line":"        \"\"\""},{"line_number":51,"context_line":"        for block in self.backup_blocks(backup, chunk_size):"},{"line_number":52,"context_line":"            postman.put(block)"},{"line_number":53,"context_line":"        postman.finish()"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    def write_backup(self, postman, backup, chunk_size\u003d10000):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_f86db499","line":52,"updated":"2015-08-25 15:18:53.000000000","message":"Not a requirements or anything to improve, but I\u0027d like to see if there\u0027s any performance improvement on doing something like:\n\nempty_list[:] \u003d [postman.put(block) for block in self.backup_blocks(backup, chunk_size)]","commit_id":"1be6af5ae57c504b089520e83bade74eb7b7bf28"},{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"819110eaa4f1750a0d4a3106165300a4fff18532","unresolved":false,"context_lines":[{"line_number":95,"context_line":"            backups \u003d [b for b in backups"},{"line_number":96,"context_line":"                       if b.timestamp \u003c\u003d recent_to_date]"},{"line_number":97,"context_line":"        err_msg \u003d \u0027[*] No matching backup name \"{0}\" found\u0027\\"},{"line_number":98,"context_line":"            .format(hostname_backup_name)"},{"line_number":99,"context_line":"        if not backups:"},{"line_number":100,"context_line":"            raise IndexError(err_msg)"},{"line_number":101,"context_line":"        backup \u003d max(backups, key\u003dlambda b: b.timestamp)"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_180f48e2","line":98,"updated":"2015-08-25 15:18:53.000000000","message":"Please don\u0027t use multi line strings with \\","commit_id":"1be6af5ae57c504b089520e83bade74eb7b7bf28"}],"freezer/streaming.py":[{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"819110eaa4f1750a0d4a3106165300a4fff18532","unresolved":false,"context_lines":[{"line_number":1,"context_line":"import multiprocessing"},{"line_number":2,"context_line":"import threading"},{"line_number":3,"context_line":"import logging"},{"line_number":4,"context_line":"from fcntl import fcntl, F_GETFL, F_SETFL"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_b8ec1cf4","line":1,"updated":"2015-08-25 15:18:53.000000000","message":"License and HP copyright needs to be added","commit_id":"1be6af5ae57c504b089520e83bade74eb7b7bf28"},{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"819110eaa4f1750a0d4a3106165300a4fff18532","unresolved":false,"context_lines":[{"line_number":96,"context_line":"    \"\"\""},{"line_number":97,"context_line":"    data_queue \u003d multiprocessing.Queue(maxsize\u003dqueue_size)"},{"line_number":98,"context_line":"    info_queue \u003d multiprocessing.Queue(maxsize\u003dqueue_size)"},{"line_number":99,"context_line":"    stop_queue \u003d multiprocessing.Queue(maxsize\u003dqueue_size)"},{"line_number":100,"context_line":"    read_stream \u003d QueuedThread(read_function, info_queue, stop_queue,"},{"line_number":101,"context_line":"                               data_queue, kwargs\u003dread_function_kwargs)"},{"line_number":102,"context_line":"    write_stream \u003d QueuedThread(write_function, info_queue, stop_queue,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_f8c5b43c","line":99,"updated":"2015-08-25 15:18:53.000000000","message":"queue_size is initialized by default as 40. How much would be the default size 1 item that would go in teh queue?","commit_id":"1be6af5ae57c504b089520e83bade74eb7b7bf28"},{"author":{"_account_id":14340,"name":"Memo Garcia","email":"guillermo.ramirez-garcia@hp.com","username":"memogarcia"},"change_message_id":"2bf1defa0a4788337437ec02c974b8135a20078a","unresolved":false,"context_lines":[{"line_number":28,"context_line":"import Queue"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"class PostMan:"},{"line_number":32,"context_line":"    def __init__(self, data_queue, stop_queue):"},{"line_number":33,"context_line":"        self.data_queue \u003d data_queue"},{"line_number":34,"context_line":"        self.stop_queue \u003d stop_queue"}],"source_content_type":"text/x-python","patch_set":11,"id":"da20952f_60404d08","line":31,"updated":"2015-09-02 13:55:58.000000000","message":"we should have description for the class and the functions","commit_id":"e1a49565ba14df1e73b36ed4ba150cdae18610f9"}],"freezer/swift.py":[{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"819110eaa4f1750a0d4a3106165300a4fff18532","unresolved":false,"context_lines":[{"line_number":260,"context_line":"                obj_fd.write(obj_chunk)"},{"line_number":261,"context_line":"        return tar_meta_abs"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"    def backup_blocks(self, backup, chunk_size\u003dRESP_CHUNK_SIZE):"},{"line_number":264,"context_line":"        for chunk in self.swift().get_object(self.container, backup,"},{"line_number":265,"context_line":"                                             resp_chunk_size\u003dchunk_size)[1]:"},{"line_number":266,"context_line":"            yield chunk"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_b88e5cce","line":263,"updated":"2015-08-25 15:18:53.000000000","message":"Would a generator comprehension be better in this case?\nprobably something like:\n\nyield (chunk for chunk in self.swift().get_object(self.container, backup, resp_chunk_size\u003dchunk_size)[1]).next()","commit_id":"1be6af5ae57c504b089520e83bade74eb7b7bf28"},{"author":{"_account_id":11151,"name":"Fausto Marzi","email":"fausto.marzi@ericsson.com","username":"fausto.marzi"},"change_message_id":"819110eaa4f1750a0d4a3106165300a4fff18532","unresolved":false,"context_lines":[{"line_number":271,"context_line":"        :type postman: freezer.streaming.PostMan"},{"line_number":272,"context_line":"        :type backup: SwiftBackup"},{"line_number":273,"context_line":"        \"\"\""},{"line_number":274,"context_line":"        block_index \u003d 0"},{"line_number":275,"context_line":"        for message in postman.messages():"},{"line_number":276,"context_line":"            segment_package_name \u003d u\u0027{0}/{1}/{2}/{3}\u0027.format("},{"line_number":277,"context_line":"                backup, backup.timestamp,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa1b9901_8a1a1b6e","line":274,"updated":"2015-08-25 15:18:53.000000000","message":"check if using enumerate can be better then tracking block_index","commit_id":"1be6af5ae57c504b089520e83bade74eb7b7bf28"},{"author":{"_account_id":14340,"name":"Memo Garcia","email":"guillermo.ramirez-garcia@hp.com","username":"memogarcia"},"change_message_id":"642116c032be33c5ebe7e0c892e2fadde8f22e02","unresolved":false,"context_lines":[{"line_number":241,"context_line":"    def backup_blocks(self, backup):"},{"line_number":242,"context_line":"        for chunk in self.swift().get_object("},{"line_number":243,"context_line":"                self.container, backup, resp_chunk_size\u003dself.chunk_size)[1]:"},{"line_number":244,"context_line":"            print \"yield \" + str(len(chunk))"},{"line_number":245,"context_line":"            yield chunk"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"    def write_backup(self, rich_queue, backup):"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_520cd641","line":244,"updated":"2015-09-10 11:05:44.000000000","message":"remove print","commit_id":"409708496dd83ff9b37608fc42882421e4580f9d"}],"freezer/tar.py":[{"author":{"_account_id":14340,"name":"Memo Garcia","email":"guillermo.ramirez-garcia@hp.com","username":"memogarcia"},"change_message_id":"642116c032be33c5ebe7e0c892e2fadde8f22e02","unresolved":false,"context_lines":[{"line_number":22,"context_line":"\"\"\""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class TarCommandBuilder:"},{"line_number":26,"context_line":"    \"\"\""},{"line_number":27,"context_line":"    Building a tar cmd command. To build command invoke method build."},{"line_number":28,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_c69d87bc","line":25,"updated":"2015-09-10 11:05:44.000000000","message":"add windows template\n\n # local windows template\nWINDOWS_TEMPLATE \u003d (\n    \"{gnutar_path} -c {algo} --incremental --unlink-first \"\n    \"--ignore-zeros --force-local \"\n)","commit_id":"409708496dd83ff9b37608fc42882421e4580f9d"},{"author":{"_account_id":14340,"name":"Memo Garcia","email":"guillermo.ramirez-garcia@hp.com","username":"memogarcia"},"change_message_id":"642116c032be33c5ebe7e0c892e2fadde8f22e02","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self.openssl_path \u003d openssl_path"},{"line_number":72,"context_line":"        self.encrypt_pass_file \u003d encrypt_pass_file"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def build(self):"},{"line_number":75,"context_line":"        tar_command \u003d self.COMMAND_TEMPLATE.format("},{"line_number":76,"context_line":"            gnutar_path\u003dself.gnutar_path, algo\u003dself.compression_algo,"},{"line_number":77,"context_line":"            dereference\u003dself.dereference)"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_46917799","line":74,"updated":"2015-09-10 11:05:44.000000000","message":"change command when is_windows","commit_id":"409708496dd83ff9b37608fc42882421e4580f9d"},{"author":{"_account_id":14340,"name":"Memo Garcia","email":"guillermo.ramirez-garcia@hp.com","username":"memogarcia"},"change_message_id":"642116c032be33c5ebe7e0c892e2fadde8f22e02","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"class TarCommandRestoreBuilder:"},{"line_number":102,"context_line":"    WINDOWS_TEMPLATE \u003d \u0027{0} -x {1} --incremental --unlink-first \u0027 \\"},{"line_number":103,"context_line":"        \u0027--ignore-zeros -f - \u0027"},{"line_number":104,"context_line":"    DRY_RUN_TEMPLATE \u003d \u0027{0} {1} --incremental --list \u0027 \\"},{"line_number":105,"context_line":"        \u0027--ignore-zeros --warning\u003dnone\u0027"},{"line_number":106,"context_line":"    NORMAL_TEMPLATE \u003d \u0027{0} {1} --incremental --extract --unlink-first \u0027 \\"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_06b4df32","line":103,"updated":"2015-09-10 11:05:44.000000000","message":"change -f by --force-local and remove \"-\"","commit_id":"409708496dd83ff9b37608fc42882421e4580f9d"},{"author":{"_account_id":14340,"name":"Memo Garcia","email":"guillermo.ramirez-garcia@hp.com","username":"memogarcia"},"change_message_id":"642116c032be33c5ebe7e0c892e2fadde8f22e02","unresolved":false,"context_lines":[{"line_number":127,"context_line":""},{"line_number":128,"context_line":"    def build(self):"},{"line_number":129,"context_line":"        if self.is_windows:"},{"line_number":130,"context_line":"            tar_command \u003d self.NORMAL_TEMPLATE.format(self.tar_path,"},{"line_number":131,"context_line":"                                                      self.compression_algo)"},{"line_number":132,"context_line":"        elif self.dry_run:"},{"line_number":133,"context_line":"            tar_command \u003d self.DRY_RUN_TEMPLATE.format(self.tar_path,"}],"source_content_type":"text/x-python","patch_set":12,"id":"da20952f_06185f74","line":130,"updated":"2015-09-10 11:05:44.000000000","message":"should be WINDOWS_TEMPLATE","commit_id":"409708496dd83ff9b37608fc42882421e4580f9d"}]}
