)]}'
{"etc/trove/trove-guestagent.conf.sample":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"1fb78470c1744fb4df2375536de4c65faa54c9c1","unresolved":false,"context_lines":[{"line_number":87,"context_line":"backup_aes_cbc_key \u003d \"default_aes_cbc_key\""},{"line_number":88,"context_line":"backup_use_snet \u003d False"},{"line_number":89,"context_line":"swift_object_chunk_size \u003d 65536"},{"line_number":90,"context_line":"swift_object_segment_max_size \u003d 2147483648"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"AAAAXH%2F%2FnGU%3D","line":90,"updated":"2014-04-18 20:30:31.000000000","message":"do it\u0027s really need to be named as \"swift_*\" ?\nstorage is still optional, and i guess they should be name as \"object_*\"","commit_id":"031e9ce48ca844138bea623b3a389e9388b752f8"},{"author":{"_account_id":5390,"name":"Steve Leon","username":"steve-leon","inactive":true},"change_message_id":"ab12d34105be607756166cca0d92a71d04ebc698","unresolved":false,"context_lines":[{"line_number":87,"context_line":"backup_aes_cbc_key \u003d \"default_aes_cbc_key\""},{"line_number":88,"context_line":"backup_use_snet \u003d False"},{"line_number":89,"context_line":"swift_object_chunk_size \u003d 65536"},{"line_number":90,"context_line":"swift_object_segment_max_size \u003d 2147483648"}],"source_content_type":"application/octet-stream","patch_set":9,"id":"AAAAXH%2F%2Fm%2Fg%3D","line":90,"in_reply_to":"AAAAXH%2F%2FnGU%3D","updated":"2014-04-18 20:40:57.000000000","message":"The renaming was mainly to have the storage strategy be decoupled from any \u0027backups\u0027 config. These configs are in reality related to swift objects. which in the case of trove are backups. Later in the future, we could have a different type of objects.","commit_id":"031e9ce48ca844138bea623b3a389e9388b752f8"}],"trove/backup/models.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b367bff7d8511c5f463c23d79ceacdd12062f005","unresolved":false,"context_lines":[{"line_number":21,"context_line":"from trove.common import exception"},{"line_number":22,"context_line":"from trove.db.models import DatabaseModelBase"},{"line_number":23,"context_line":"from trove.openstack.common import log as logging"},{"line_number":24,"context_line":"from trove.common.strategy.storage import get_storage_strategy"},{"line_number":25,"context_line":"from trove.taskmanager import api"},{"line_number":26,"context_line":"from trove.common import utils"},{"line_number":27,"context_line":"from trove.quota.quota import run_with_quotas"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_024eb937","line":24,"updated":"2014-06-14 18:35:47.000000000","message":"should be placed right after line #22","commit_id":"031e9ce48ca844138bea623b3a389e9388b752f8"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"1fb78470c1744fb4df2375536de4c65faa54c9c1","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    @classmethod"},{"line_number":236,"context_line":"    def verify_storage_auth(cls, context):"},{"line_number":237,"context_line":"        storage \u003d get_storage_strategy(CONF.storage_strategy,"},{"line_number":238,"context_line":"                                       CONF.storage_namespace)(context)"},{"line_number":239,"context_line":"        try:"},{"line_number":240,"context_line":"            storage.verify_auth()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAXH%2F%2FnEM%3D","line":237,"updated":"2014-04-18 20:30:31.000000000","message":"it seems that storage initialization is duplicated several times,  and it\u0027s not changes until Trove get restarted and conf values are updated.\n\nmy point is that this value should be global for this module","commit_id":"031e9ce48ca844138bea623b3a389e9388b752f8"},{"author":{"_account_id":5390,"name":"Steve Leon","username":"steve-leon","inactive":true},"change_message_id":"d6fba7458e48399b41f258271a771efda1ce1330","unresolved":false,"context_lines":[{"line_number":234,"context_line":""},{"line_number":235,"context_line":"    @classmethod"},{"line_number":236,"context_line":"    def verify_storage_auth(cls, context):"},{"line_number":237,"context_line":"        storage \u003d get_storage_strategy(CONF.storage_strategy,"},{"line_number":238,"context_line":"                                       CONF.storage_namespace)(context)"},{"line_number":239,"context_line":"        try:"},{"line_number":240,"context_line":"            storage.verify_auth()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAXH%2F%2Fmdw%3D","line":237,"in_reply_to":"AAAAXH%2F%2FnEM%3D","updated":"2014-04-18 22:30:37.000000000","message":"Yes it is duplicated. But this will change once i upload the patch that does the cross-region-backup. Dont worry, if there duplication becomes bad and the code looks bad, ill take care of this. But i dont want to do this change now because it is going to change soon. Nice find though","commit_id":"031e9ce48ca844138bea623b3a389e9388b752f8"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"1fb78470c1744fb4df2375536de4c65faa54c9c1","unresolved":false,"context_lines":[{"line_number":278,"context_line":"            obj \u003d parts[-1]"},{"line_number":279,"context_line":"            container \u003d parts[-2]"},{"line_number":280,"context_line":"            storage \u003d get_storage_strategy(CONF.storage_strategy,"},{"line_number":281,"context_line":"                                           CONF.storage_namespace)(context)"},{"line_number":282,"context_line":"            LOG.info(_(\"Checking if backup exist in \u0027%s\u0027\") % self.location)"},{"line_number":283,"context_line":"            if verify_checksum:"},{"line_number":284,"context_line":"                LOG.info(_(\"Checking if backup checksum matches swift.\"))"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAXH%2F%2FnD0%3D","line":281,"updated":"2014-04-18 20:30:31.000000000","message":"duplication","commit_id":"031e9ce48ca844138bea623b3a389e9388b752f8"}],"trove/common/cfg.py":[{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"d111dda2348147a440d38f6184cbe5b9afcf9ac8","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                help\u003d\u0027Incremental Backup Runner Based off of the default\u0027"},{"line_number":166,"context_line":"                \u0027 strategy. For strategies that do not implement an\u0027"},{"line_number":167,"context_line":"                \u0027 incremental the runner will use the default full backup.\u0027),"},{"line_number":168,"context_line":"    cfg.BoolOpt(\u0027verify_checksum_on_restore\u0027, default\u003dTrue,"},{"line_number":169,"context_line":"                help\u003d\u0027Enable verification of checksum before starting restore;\u0027"},{"line_number":170,"context_line":"                \u0027 makes sure the checksum of original backup matches checksum \u0027"},{"line_number":171,"context_line":"                \u0027of the storage backup file.\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_a7264114","line":168,"updated":"2014-06-12 06:28:45.000000000","message":"i\u0027m not thrilled that you are changing the name of the config option as its hard to make sure you change all the configurations in running deployments. Can you elaborate why you decided to make these changes the the config names?","commit_id":"031e9ce48ca844138bea623b3a389e9388b752f8"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b367bff7d8511c5f463c23d79ceacdd12062f005","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                help\u003d\u0027Incremental Backup Runner Based off of the default\u0027"},{"line_number":166,"context_line":"                \u0027 strategy. For strategies that do not implement an\u0027"},{"line_number":167,"context_line":"                \u0027 incremental the runner will use the default full backup.\u0027),"},{"line_number":168,"context_line":"    cfg.BoolOpt(\u0027verify_checksum_on_restore\u0027, default\u003dTrue,"},{"line_number":169,"context_line":"                help\u003d\u0027Enable verification of checksum before starting restore;\u0027"},{"line_number":170,"context_line":"                \u0027 makes sure the checksum of original backup matches checksum \u0027"},{"line_number":171,"context_line":"                \u0027of the storage backup file.\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_82272962","line":168,"in_reply_to":"1ae5cdf2_a7264114","updated":"2014-06-14 18:35:47.000000000","message":"@Craig, as i can see it\u0027s \u0027nice-to-have\u0027 because we allow to have more than one type of Storage being implemented, that\u0027s why it\u0027s good decision to have common names for Storage-related options. \nAlso, as i can see it\u0027s also nice to have separate oslo group for each storage. It doesn\u0027t affect anything but looks more read-able.","commit_id":"031e9ce48ca844138bea623b3a389e9388b752f8"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b367bff7d8511c5f463c23d79ceacdd12062f005","unresolved":false,"context_lines":[{"line_number":189,"context_line":"               \u0027 size of an md5 digest block allowing the process to update\u0027"},{"line_number":190,"context_line":"               \u0027 the file checksum during streaming.\u0027"},{"line_number":191,"context_line":"               \u0027 See: http://stackoverflow.com/questions/1131220/\u0027),"},{"line_number":192,"context_line":"    cfg.IntOpt(\u0027swift_object_segment_max_size\u0027, default\u003d2 * (1024 ** 3),"},{"line_number":193,"context_line":"               help\u003d\"Maximum size of each segment of the swift object.\"),"},{"line_number":194,"context_line":"    cfg.StrOpt(\u0027remote_dns_client\u0027,"},{"line_number":195,"context_line":"               default\u003d\u0027trove.common.remote.dns_client\u0027),"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_42bfe1cf","line":192,"updated":"2014-06-14 18:35:47.000000000","message":"i\u0027d suggest not to rename this option by adding Storage type prefix, it would be better to have \"objet_...\"","commit_id":"031e9ce48ca844138bea623b3a389e9388b752f8"}],"trove/common/strategy/storage/base.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b367bff7d8511c5f463c23d79ceacdd12062f005","unresolved":false,"context_lines":[{"line_number":21,"context_line":"class Storage(Strategy):"},{"line_number":22,"context_line":"    \"\"\"Base class for Storage Strategy implementation \"\"\""},{"line_number":23,"context_line":"    __strategy_type__ \u003d \u0027storage\u0027"},{"line_number":24,"context_line":"    __strategy_ns__ \u003d \u0027trove.common.strategy.storage\u0027"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    def __init__(self, context):"},{"line_number":27,"context_line":"        self.context \u003d context"}],"source_content_type":"text/x-python","patch_set":9,"id":"1ae5cdf2_e29c6d6c","line":24,"updated":"2014-06-14 18:35:47.000000000","message":"__strategy_ns__ \u003d __name__","commit_id":"031e9ce48ca844138bea623b3a389e9388b752f8"}],"trove/common/strategy/storage/swift.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ee2580164fd015e5c431a0447667c3591f6c6de0","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        LOG.info(_(\"Writing metadata: %s\"), str(headers))"},{"line_number":234,"context_line":"        self.connection.post_object(container, filename, headers\u003dheaders)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def delete(self, container, filename):"},{"line_number":237,"context_line":"        \"\"\"Delete a swift object.\"\"\""},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        obj \u003d self.connection.head_object(container, filename)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAW3%2F%2F8rE%3D","line":236,"updated":"2014-04-09 10:20:59.000000000","message":"first, i think we need to check if the file is available, if not - raise an exception","commit_id":"d0344bacb9cd8145f5444b22c08888bf62b0c18e"},{"author":{"_account_id":5390,"name":"Steve Leon","username":"steve-leon","inactive":true},"change_message_id":"61f91524ea0577d43bfabd875ec39d74ef0b4eaf","unresolved":false,"context_lines":[{"line_number":233,"context_line":"        LOG.info(_(\"Writing metadata: %s\"), str(headers))"},{"line_number":234,"context_line":"        self.connection.post_object(container, filename, headers\u003dheaders)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"    def delete(self, container, filename):"},{"line_number":237,"context_line":"        \"\"\"Delete a swift object.\"\"\""},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"        obj \u003d self.connection.head_object(container, filename)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAW3%2F%2F434%3D","line":236,"in_reply_to":"AAAAW3%2F%2F8rE%3D","updated":"2014-04-09 17:13:15.000000000","message":"The swiftclient raises an exception when the delete fails, which is handled by the caller. Similar to other methods (like save and load), they dont do a pre-check. If we were to use try/except, we would have to raise the exception again. I dont want to use try/except, unless the logic change depending on the result.","commit_id":"d0344bacb9cd8145f5444b22c08888bf62b0c18e"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"ee2580164fd015e5c431a0447667c3591f6c6de0","unresolved":false,"context_lines":[{"line_number":246,"context_line":"            # list files from container/prefix specified by manifest"},{"line_number":247,"context_line":"            headers, segments \u003d self.connection.get_container(cont,"},{"line_number":248,"context_line":"                                                              prefix\u003dprefix)"},{"line_number":249,"context_line":"            LOG.debug(headers)"},{"line_number":250,"context_line":"            for segment in segments:"},{"line_number":251,"context_line":"                name \u003d segment.get(\u0027name\u0027)"},{"line_number":252,"context_line":"                if name:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAW3%2F%2F8rw%3D","line":249,"updated":"2014-04-09 10:20:59.000000000","message":"LOG.debug(_(headers))","commit_id":"d0344bacb9cd8145f5444b22c08888bf62b0c18e"}],"trove/taskmanager/manager.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"8ac8a30dc36cb8dfeccd3264b58587ce2cfe28cf","unresolved":false,"context_lines":[{"line_number":72,"context_line":"            instance_tasks.delete_async()"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def delete_backup(self, context, backup_id):"},{"line_number":75,"context_line":"        backup_task \u003d models.BackupTasks.load(context)"},{"line_number":76,"context_line":"        backup_task.delete_backup(backup_id)"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"    def create_backup(self, context, backup_info, instance_id):"}],"source_content_type":"text/x-python","patch_set":13,"id":"baada198_565f6f0e","line":75,"updated":"2014-07-01 08:29:48.000000000","message":"Since this patch proposes huge code movement and some sort of related changes, i\u0027d suggest to remove BackupTask class completely since it\u0027s a class that has 3 functions that are fitting perfectly to BuiltInstanceTask.","commit_id":"72b0ac071eec7ba3d464df8a1725915115cb64c8"}],"trove/taskmanager/models.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"fe8d6f0a93e38e21fff396688782a323e2eae4fe","unresolved":false,"context_lines":[{"line_number":938,"context_line":"        #delete backup from storage"},{"line_number":939,"context_line":"        backup \u003d bkup_models.Backup.get_by_id(self.context, backup_id)"},{"line_number":940,"context_line":"        try:"},{"line_number":941,"context_line":"            container \u003d CONF.backup_swift_container"},{"line_number":942,"context_line":"            filename \u003d backup.filename"},{"line_number":943,"context_line":"            if filename:"},{"line_number":944,"context_line":"                self.storage.delete(container, filename)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_501cb56a","line":941,"range":{"start_line":941,"start_character":30,"end_line":941,"end_character":51},"updated":"2014-06-17 14:20:12.000000000","message":"i\u0027d suggest to rename this option to something more generic","commit_id":"ff81b1accd7f7410d7ea90b0a0535eb726f69817"},{"author":{"_account_id":11316,"name":"Steve Leon","email":"kokhang@gmail.com","username":"kokhang"},"change_message_id":"c987bcfe0133f2e90bf310e9def2ffc1eccf32c4","unresolved":false,"context_lines":[{"line_number":938,"context_line":"        #delete backup from storage"},{"line_number":939,"context_line":"        backup \u003d bkup_models.Backup.get_by_id(self.context, backup_id)"},{"line_number":940,"context_line":"        try:"},{"line_number":941,"context_line":"            container \u003d CONF.backup_swift_container"},{"line_number":942,"context_line":"            filename \u003d backup.filename"},{"line_number":943,"context_line":"            if filename:"},{"line_number":944,"context_line":"                self.storage.delete(container, filename)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1ae5cdf2_b02ed940","line":941,"range":{"start_line":941,"start_character":30,"end_line":941,"end_character":51},"in_reply_to":"1ae5cdf2_501cb56a","updated":"2014-06-17 14:27:09.000000000","message":"I had it renamed before but renaming a configuration can be a headache for many people. Perhaps we can do it in V2. But i agree with you. It should be more generic :-)","commit_id":"ff81b1accd7f7410d7ea90b0a0535eb726f69817"}],"trove/tests/unittests/common/test_storage.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"1fb78470c1744fb4df2375536de4c65faa54c9c1","unresolved":false,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from trove.common.context import TroveContext"},{"line_number":20,"context_line":"from trove.tests.fakes.swift import FakeSwiftConnection"},{"line_number":21,"context_line":"from trove.tests.unittests.backup.test_backupagent \\"},{"line_number":22,"context_line":"    import MockBackup as MockBackupRunner"},{"line_number":23,"context_line":"from trove.common.strategy.storage.swift \\"},{"line_number":24,"context_line":"    import SwiftDownloadIntegrityError"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAXH%2F%2FnCY%3D","line":21,"updated":"2014-04-18 20:30:31.000000000","message":"do not use \\, if line is too long use #noqa","commit_id":"031e9ce48ca844138bea623b3a389e9388b752f8"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"1fb78470c1744fb4df2375536de4c65faa54c9c1","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from trove.tests.fakes.swift import FakeSwiftConnection"},{"line_number":21,"context_line":"from trove.tests.unittests.backup.test_backupagent \\"},{"line_number":22,"context_line":"    import MockBackup as MockBackupRunner"},{"line_number":23,"context_line":"from trove.common.strategy.storage.swift \\"},{"line_number":24,"context_line":"    import SwiftDownloadIntegrityError"},{"line_number":25,"context_line":"from trove.common.strategy.storage import swift"},{"line_number":26,"context_line":"from trove.common.strategy.storage.swift import SwiftStorage"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAXH%2F%2FnCU%3D","line":23,"updated":"2014-04-18 20:30:31.000000000","message":"same","commit_id":"031e9ce48ca844138bea623b3a389e9388b752f8"}]}
