)]}'
{"cinder/backup/chunkeddriver.py":[{"author":{"_account_id":9237,"name":"Kevin Fox","email":"kevin@efox.cc","username":"kfox1111"},"change_message_id":"08b709a281dd0cb19c263e0c9b8b0c3cbfb582ca","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        return object_meta, container, volume_size_bytes"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def _write_whole_chunk(self, reader, writer, compressor,"},{"line_number":249,"context_line":"                           max_write_size_bytes, max_chunk_size_bytes):"},{"line_number":250,"context_line":"        eof \u003d False"},{"line_number":251,"context_line":"        data_size \u003d 0"},{"line_number":252,"context_line":"        compressed_size \u003d 0"}],"source_content_type":"text/x-python","patch_set":1,"id":"1a930d6b_a6f0eafe","line":249,"updated":"2015-01-26 17:45:07.000000000","message":"Minor comment: I had max_read_size_bytes in my version because you are trying to ensure that exact number of bytes is read from the input. There is no exact write size if you are using compression so max_write_size_bytes is somewhat misleading. You may actually write more data then what\u0027s contained in this value if it compresses badly. Though this is a very minor thing and the code may be more readable with max_write_size_bytes. What do you think?","commit_id":"e95a9abecb0c2c0d0176b5e009c10951f43d4760"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"a7f36325451cff677ec3154964f5f63a8c61a782","unresolved":false,"context_lines":[{"line_number":246,"context_line":"        return object_meta, container, volume_size_bytes"},{"line_number":247,"context_line":""},{"line_number":248,"context_line":"    def _write_whole_chunk(self, reader, writer, compressor,"},{"line_number":249,"context_line":"                           max_write_size_bytes, max_chunk_size_bytes):"},{"line_number":250,"context_line":"        eof \u003d False"},{"line_number":251,"context_line":"        data_size \u003d 0"},{"line_number":252,"context_line":"        compressed_size \u003d 0"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa81d914_1e20cff6","line":249,"in_reply_to":"1a930d6b_a6f0eafe","updated":"2015-01-28 03:19:28.000000000","message":"Good point.  Now I\u0027m not sure I like either name for this parameter :-) as it seemed to us that the likely constraint on I/O comes more from writes than from reads in the non-pathological cases.  Just saying I want to think about this one a bit more ...","commit_id":"e95a9abecb0c2c0d0176b5e009c10951f43d4760"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"a2f1a34565520c44b39305881436de7ed144898d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"chunkedbackup_service_opts \u003d ["},{"line_number":45,"context_line":"    cfg.StrOpt(\u0027backup_compression_algorithm\u0027,"},{"line_number":46,"context_line":"               default\u003d\u0027zlib\u0027,"},{"line_number":47,"context_line":"               help\u003d\u0027Compression algorithm (None to disable)\u0027),"},{"line_number":48,"context_line":"]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_cad52d1c","line":47,"updated":"2015-02-17 15:00:07.000000000","message":"Please, add default value to help message","commit_id":"99ebda5088a22b5e5672beb78ca5f9cb4d4eb90c"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"3a0871d331ee91f7f9a49290ca8e186a9f8271ef","unresolved":false,"context_lines":[{"line_number":44,"context_line":"chunkedbackup_service_opts \u003d ["},{"line_number":45,"context_line":"    cfg.StrOpt(\u0027backup_compression_algorithm\u0027,"},{"line_number":46,"context_line":"               default\u003d\u0027zlib\u0027,"},{"line_number":47,"context_line":"               help\u003d\u0027Compression algorithm (None to disable)\u0027),"},{"line_number":48,"context_line":"]"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"CONF \u003d cfg.CONF"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_2cff84ac","line":47,"in_reply_to":"da86d52c_cad52d1c","updated":"2015-02-18 20:45:53.000000000","message":"I agree that this should be done but note that this is a refactor patch to make its core business logic extensible to other kinds of backend than Swift proper, not a patch to improve and enhance the Swift driver.\n\nThere are several places that IMO the Swift driver could be improved but I have resisted doing anything in *this* change set in that regard.  I want reviewers to be able to look at this code, look at the Swift driver code, and agree that it is a clean refactor with the same functionality.\n\nSo I would prefer it if reviewers continue to make this kind of observation and then tag their remarks with a note as to whether the code in question is part of the original Swift driver or was introduced by the refactor.\n\nWe can then deal with all refactor issues first, then scan the reviews for residual issues with the original code and either fix them in a separate patch or in a final changeset in this review.","commit_id":"99ebda5088a22b5e5672beb78ca5f9cb4d4eb90c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"a2f1a34565520c44b39305881436de7ed144898d","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                import bz2 as compressor"},{"line_number":78,"context_line":"                return (compressor.BZ2Compressor, compressor.BZ2Decompressor)"},{"line_number":79,"context_line":"        except ImportError:"},{"line_number":80,"context_line":"            pass"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        err \u003d _(\u0027unsupported compression algorithm: %s\u0027) % algorithm"},{"line_number":83,"context_line":"        raise ValueError(six.text_type(err))"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_eaaf517b","line":80,"updated":"2015-02-17 15:00:07.000000000","message":"I propose at least add logging here and raise exception with more detailed error than is algorithm is not supported","commit_id":"99ebda5088a22b5e5672beb78ca5f9cb4d4eb90c"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"3a0871d331ee91f7f9a49290ca8e186a9f8271ef","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                import bz2 as compressor"},{"line_number":78,"context_line":"                return (compressor.BZ2Compressor, compressor.BZ2Decompressor)"},{"line_number":79,"context_line":"        except ImportError:"},{"line_number":80,"context_line":"            pass"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        err \u003d _(\u0027unsupported compression algorithm: %s\u0027) % algorithm"},{"line_number":83,"context_line":"        raise ValueError(six.text_type(err))"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_6cd33c38","line":80,"in_reply_to":"da86d52c_eaaf517b","updated":"2015-02-18 20:45:53.000000000","message":"See above remark.","commit_id":"99ebda5088a22b5e5672beb78ca5f9cb4d4eb90c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"a2f1a34565520c44b39305881436de7ed144898d","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        except ImportError:"},{"line_number":80,"context_line":"            pass"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        err \u003d _(\u0027unsupported compression algorithm: %s\u0027) % algorithm"},{"line_number":83,"context_line":"        raise ValueError(six.text_type(err))"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def __init__(self, context, chunk_size_bytes, max_read_size_bytes,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_6a9e0165","line":82,"updated":"2015-02-17 15:00:07.000000000","message":"Please, start message with upper-case letter here and below.","commit_id":"99ebda5088a22b5e5672beb78ca5f9cb4d4eb90c"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"3a0871d331ee91f7f9a49290ca8e186a9f8271ef","unresolved":false,"context_lines":[{"line_number":79,"context_line":"        except ImportError:"},{"line_number":80,"context_line":"            pass"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"        err \u003d _(\u0027unsupported compression algorithm: %s\u0027) % algorithm"},{"line_number":83,"context_line":"        raise ValueError(six.text_type(err))"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"    def __init__(self, context, chunk_size_bytes, max_read_size_bytes,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_0ccba072","line":82,"in_reply_to":"da86d52c_6a9e0165","updated":"2015-02-18 20:45:53.000000000","message":"Ditto.","commit_id":"99ebda5088a22b5e5672beb78ca5f9cb4d4eb90c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"a2f1a34565520c44b39305881436de7ed144898d","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        metadata_json \u003d json.dumps(metadata, sort_keys\u003dTrue, indent\u003d2)"},{"line_number":199,"context_line":"        with self.get_object_writer(container, filename) as writer:"},{"line_number":200,"context_line":"            writer.write(metadata_json)"},{"line_number":201,"context_line":"        LOG.debug(\u0027_write_metadata finished\u0027)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def _read_metadata(self, backup):"},{"line_number":204,"context_line":"        container \u003d backup[\u0027container\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_aa11d9b0","line":201,"updated":"2015-02-17 15:00:07.000000000","message":"Add metadata to logs will be useful","commit_id":"99ebda5088a22b5e5672beb78ca5f9cb4d4eb90c"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"3a0871d331ee91f7f9a49290ca8e186a9f8271ef","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        metadata_json \u003d json.dumps(metadata, sort_keys\u003dTrue, indent\u003d2)"},{"line_number":199,"context_line":"        with self.get_object_writer(container, filename) as writer:"},{"line_number":200,"context_line":"            writer.write(metadata_json)"},{"line_number":201,"context_line":"        LOG.debug(\u0027_write_metadata finished\u0027)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    def _read_metadata(self, backup):"},{"line_number":204,"context_line":"        container \u003d backup[\u0027container\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_0c23a005","line":201,"in_reply_to":"da86d52c_aa11d9b0","updated":"2015-02-18 20:45:53.000000000","message":"Agreed.\n\nThis is new code.  I will present the content of the metadata as json in the debug log itself.","commit_id":"99ebda5088a22b5e5672beb78ca5f9cb4d4eb90c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"a2f1a34565520c44b39305881436de7ed144898d","unresolved":false,"context_lines":[{"line_number":207,"context_line":"                  \u0027metadata filename: %(filename)s\u0027,"},{"line_number":208,"context_line":"                  {\u0027container\u0027: container, \u0027filename\u0027: filename})"},{"line_number":209,"context_line":"        reader \u003d self.get_object_reader(container, filename)"},{"line_number":210,"context_line":"        metadata \u003d json.loads(reader.read())"},{"line_number":211,"context_line":"        LOG.debug(\u0027_read_metadata finished (%s)\u0027, metadata)"},{"line_number":212,"context_line":"        return metadata"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_4a205df8","line":210,"updated":"2015-02-17 15:00:07.000000000","message":"The same as above","commit_id":"99ebda5088a22b5e5672beb78ca5f9cb4d4eb90c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"a2f1a34565520c44b39305881436de7ed144898d","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        if backup_metadata:"},{"line_number":449,"context_line":"            try:"},{"line_number":450,"context_line":"                self._backup_metadata(backup, object_metadata)"},{"line_number":451,"context_line":"            except Exception as err:"},{"line_number":452,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":453,"context_line":"                    LOG.exception("},{"line_number":454,"context_line":"                        _LE(\"Backup volume metadata failed: %s\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_6a4d21c4","line":451,"updated":"2015-02-17 15:00:07.000000000","message":"Could we handle less general exception here?","commit_id":"99ebda5088a22b5e5672beb78ca5f9cb4d4eb90c"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"3a0871d331ee91f7f9a49290ca8e186a9f8271ef","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        if backup_metadata:"},{"line_number":449,"context_line":"            try:"},{"line_number":450,"context_line":"                self._backup_metadata(backup, object_metadata)"},{"line_number":451,"context_line":"            except Exception as err:"},{"line_number":452,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":453,"context_line":"                    LOG.exception("},{"line_number":454,"context_line":"                        _LE(\"Backup volume metadata failed: %s\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_2cf86449","line":451,"in_reply_to":"da86d52c_1822ffb8","updated":"2015-02-18 20:45:53.000000000","message":"This is original Swift code but I\u0027ll go on and add the comment :-)","commit_id":"99ebda5088a22b5e5672beb78ca5f9cb4d4eb90c"},{"author":{"_account_id":1736,"name":"Ivan Kolodyazhny","email":"e0ne@e0ne.info","username":"e0ne"},"change_message_id":"bcd3c8f0f9a883aaa257c3f11ed652fae1e7432d","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        if backup_metadata:"},{"line_number":449,"context_line":"            try:"},{"line_number":450,"context_line":"                self._backup_metadata(backup, object_metadata)"},{"line_number":451,"context_line":"            except Exception as err:"},{"line_number":452,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":453,"context_line":"                    LOG.exception("},{"line_number":454,"context_line":"                        _LE(\"Backup volume metadata failed: %s\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_1822ffb8","line":451,"in_reply_to":"da86d52c_3504447d","updated":"2015-02-18 20:23:47.000000000","message":"Sounds reasonable, thanks Duncan.\nI was not sure about it so it was only question for me which is resolved now. I won\u0027t block patch for it but if such detailed comment be added, it will be great to clarify why Exception class is used here.","commit_id":"99ebda5088a22b5e5672beb78ca5f9cb4d4eb90c"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"1fad0b6a51e0b2ae80d51970a5a5442f0f689b0f","unresolved":false,"context_lines":[{"line_number":448,"context_line":"        if backup_metadata:"},{"line_number":449,"context_line":"            try:"},{"line_number":450,"context_line":"                self._backup_metadata(backup, object_metadata)"},{"line_number":451,"context_line":"            except Exception as err:"},{"line_number":452,"context_line":"                with excutils.save_and_reraise_exception():"},{"line_number":453,"context_line":"                    LOG.exception("},{"line_number":454,"context_line":"                        _LE(\"Backup volume metadata failed: %s\"),"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_3504447d","line":451,"in_reply_to":"da86d52c_6a4d21c4","updated":"2015-02-18 12:23:47.000000000","message":"All it does is log it, clean up the mess and re-raise, so catching them all is probably the right thing to do - it doesn\u0027t really what went wrong, cleaning up is probably the right thing to do?","commit_id":"99ebda5088a22b5e5672beb78ca5f9cb4d4eb90c"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"398cd1959f60dc4d663eba6450ddceb287f9a1fb","unresolved":false,"context_lines":[{"line_number":496,"context_line":"                        self._generate_object_names(backup)"},{"line_number":497,"context_line":"                        if object_name not in prune_list]"},{"line_number":498,"context_line":"        if sorted(object_names) !\u003d sorted(metadata_object_names):"},{"line_number":499,"context_line":"            err \u003d _(\u0027restore_backup aborted, actual object list in \u0027"},{"line_number":500,"context_line":"                    \u0027does not match object list stored in metadata\u0027)"},{"line_number":501,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":502,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_83a22497","line":499,"updated":"2015-03-06 18:35:40.000000000","message":"should remove \u0027in\u0027 here.  Guessing you were planning to include the name but decided not to.","commit_id":"9b363f6d96a677685a702c92c1d9e90cccca3fb7"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"b022efcbcd66054e3912bffa3380f8934cb8b3f7","unresolved":false,"context_lines":[{"line_number":496,"context_line":"                        self._generate_object_names(backup)"},{"line_number":497,"context_line":"                        if object_name not in prune_list]"},{"line_number":498,"context_line":"        if sorted(object_names) !\u003d sorted(metadata_object_names):"},{"line_number":499,"context_line":"            err \u003d _(\u0027restore_backup aborted, actual object list in \u0027"},{"line_number":500,"context_line":"                    \u0027does not match object list stored in metadata\u0027)"},{"line_number":501,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":502,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a80dd14_4159ff8c","line":499,"in_reply_to":"9a80dd14_83a22497","updated":"2015-03-06 20:23:39.000000000","message":"Your guess is right on.\n\nI\u0027ll remove it in the next change set.","commit_id":"9b363f6d96a677685a702c92c1d9e90cccca3fb7"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"89dc70efe5d8315df330198a0271fd29c58635bb","unresolved":false,"context_lines":[{"line_number":557,"context_line":"                        self._generate_object_names(backup)"},{"line_number":558,"context_line":"                        if object_name not in prune_list]"},{"line_number":559,"context_line":"        if sorted(object_names) !\u003d sorted(metadata_object_names):"},{"line_number":560,"context_line":"            err \u003d _(\u0027restore_backup aborted, actual object list in \u0027"},{"line_number":561,"context_line":"                    \u0027does not match object list stored in metadata.\u0027)"},{"line_number":562,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":563,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"9a80dd14_a2408608","line":560,"updated":"2015-03-10 20:02:27.000000000","message":"Looks like this didn\u0027t get fixed.  \u0027in\u0027 is still here.","commit_id":"d9f4b31aadacb4680e656882cc7e961c8008c48a"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"89dc70efe5d8315df330198a0271fd29c58635bb","unresolved":false,"context_lines":[{"line_number":681,"context_line":"                object_names \u003d self._generate_object_names(backup)"},{"line_number":682,"context_line":"            except Exception:"},{"line_number":683,"context_line":"                LOG.warn(_LW(\u0027swift error while listing objects, continuing\u0027"},{"line_number":684,"context_line":"                             \u0027 with delete\u0027))"},{"line_number":685,"context_line":""},{"line_number":686,"context_line":"            for object_name in object_names:"},{"line_number":687,"context_line":"                self.delete_object(container, object_name)"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a80dd14_e2c27e85","line":684,"updated":"2015-03-10 20:02:27.000000000","message":"suggest \u0027.\u0027 here.","commit_id":"d9f4b31aadacb4680e656882cc7e961c8008c48a"}],"cinder/backup/drivers/swift.py":[{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"19ea1aa26551611db957676efab38453cb61ea28","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    \"\"\"Provides backup, restore and delete of backup objects within Swift.\"\"\""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def __init__(self, context, db_driver\u003dNone):"},{"line_number":107,"context_line":"        chunk_size_bytes \u003d CONF.backup_swift_object_size"},{"line_number":108,"context_line":"        max_read_size_bytes \u003d CONF.backup_swift_object_size"},{"line_number":109,"context_line":"        backup_default_container \u003d CONF.backup_swift_container"},{"line_number":110,"context_line":"        enable_progress_timer \u003d CONF.backup_swift_enable_progress_timer"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_3e49168f","line":107,"updated":"2015-02-27 01:14:12.000000000","message":"would it make sense to have some common chunked backup driver config options? probably all of them will have a variable chunk size, right?","commit_id":"78f77ce3aaebc1e91e0b3a2efb6030e8b8d41ec6"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"033932160ba32e924a33a9e9df664c9f28892eee","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    \"\"\"Provides backup, restore and delete of backup objects within Swift.\"\"\""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def __init__(self, context, db_driver\u003dNone):"},{"line_number":107,"context_line":"        chunk_size_bytes \u003d CONF.backup_swift_object_size"},{"line_number":108,"context_line":"        max_read_size_bytes \u003d CONF.backup_swift_object_size"},{"line_number":109,"context_line":"        backup_default_container \u003d CONF.backup_swift_container"},{"line_number":110,"context_line":"        enable_progress_timer \u003d CONF.backup_swift_enable_progress_timer"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_eec73743","line":107,"in_reply_to":"ba7be1f8_3e49168f","updated":"2015-03-03 13:52:19.000000000","message":"Maybe so, but backup_swift_object_size already exists and (see https://review.openstack.org/#/c/149726/) the NFS backup driver, which will also subclass chunked, will set chunk_size_bytes to the maximum desired size of a backup file so there we call the corresponding config variable CONF.backup_file_size.\n\nI\u0027m open to suggestions here but would like the config variables to make sense given the subclass because even though they play the same role here Swift object and NFS file are sufficiently different creatures that I\u0027m not sure it makes sense to present them to the OpenStack administrator as an abstract CONF.chunk_size.\n\nAlso, down the road we may have backup services mediated by a scheduler so that e.g. Swift and NFS backup could run concurrently on the same node.   I realize that we could still have a common CONF.chunk_size then and scope it under [swift] and [nfs] configuration settings, but it still seems to me that we\u0027d end up having to explain what a chunk is to administrators who really don\u0027t want to think about that but who understand quite well what the size of a Swift object is or what maximum backup file size they want to use.","commit_id":"78f77ce3aaebc1e91e0b3a2efb6030e8b8d41ec6"},{"author":{"_account_id":12924,"name":"Patrick East","email":"east.patrick@gmail.com","username":"patrick.east"},"change_message_id":"6c2ada08ec0b7513c7949ed3de2f165fac1fffc9","unresolved":false,"context_lines":[{"line_number":104,"context_line":"    \"\"\"Provides backup, restore and delete of backup objects within Swift.\"\"\""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def __init__(self, context, db_driver\u003dNone):"},{"line_number":107,"context_line":"        chunk_size_bytes \u003d CONF.backup_swift_object_size"},{"line_number":108,"context_line":"        max_read_size_bytes \u003d CONF.backup_swift_object_size"},{"line_number":109,"context_line":"        backup_default_container \u003d CONF.backup_swift_container"},{"line_number":110,"context_line":"        enable_progress_timer \u003d CONF.backup_swift_enable_progress_timer"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_378d09d4","line":107,"in_reply_to":"ba7be1f8_eec73743","updated":"2015-03-03 20:50:28.000000000","message":"Thanks for the detailed explanation! That makes sense to me, I can definitely get behind the idea of making sure config variables make sense for the person trying to configure the system.","commit_id":"78f77ce3aaebc1e91e0b3a2efb6030e8b8d41ec6"},{"author":{"_account_id":6491,"name":"xing-yang","email":"xingyang105@gmail.com","username":"xing-yang"},"change_message_id":"2947de9ca569a851983902cc49b438a023fb9808","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2012 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"# Copyright (c) 2014 TrilioData, Inc"},{"line_number":3,"context_line":"# Copyright (c) 2015 EMC Corporation"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_c4dbcf7b","side":"PARENT","line":3,"updated":"2015-03-10 17:26:50.000000000","message":"TrilioData and EMC should be added back to the right.","commit_id":"b7452ac30bc803a864600a868afd1ab647f59263"},{"author":{"_account_id":9003,"name":"Tom Barron","email":"tpb@dyncloud.net","username":"tbarron"},"change_message_id":"f906507248b7faa088971d58293400035ad69992","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2012 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"# Copyright (c) 2014 TrilioData, Inc"},{"line_number":3,"context_line":"# Copyright (c) 2015 EMC Corporation"},{"line_number":4,"context_line":"# All Rights Reserved."},{"line_number":5,"context_line":"#"},{"line_number":6,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_442a7fe8","side":"PARENT","line":3,"in_reply_to":"9a80dd14_c4dbcf7b","updated":"2015-03-10 17:36:38.000000000","message":"Woops, will fix immediately.","commit_id":"b7452ac30bc803a864600a868afd1ab647f59263"}]}
