)]}'
{"trove/guestagent/backup/backupagent.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"778d033dd63725fbad213c3b77133b39fc46bd3e","unresolved":false,"context_lines":[{"line_number":91,"context_line":"                    \u0027backup_type\u0027: bkup.backup_type,"},{"line_number":92,"context_line":"                })"},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"                LOG.debug(_(\"Backup %(backup_id)s completed status: \""},{"line_number":95,"context_line":"                            \"%(success)s.\") % backup_state)"},{"line_number":96,"context_line":"                LOG.debug(_(\"Backup %(backup_id)s file swift checksum: \""},{"line_number":97,"context_line":"                            \"%(checksum)s.\") % backup_state)"}],"source_content_type":"text/x-python","patch_set":3,"id":"baada198_84e6b2e5","line":94,"updated":"2014-08-01 14:49:56.000000000","message":"no i18n on debug ;)","commit_id":"4bd68d56856b422545514126115d8ef711f703a9"}],"trove/guestagent/datastore/cassandra/manager.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"a0d55248f7c3b1590e2d40deb29d78b5cc3d5e0a","unresolved":false,"context_lines":[{"line_number":187,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":188,"context_line":"            operation\u003d\u0027apply_overrides\u0027, datastore\u003dMANAGER)"},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"    def get_replication_snapshot(self, snapshot_info):"},{"line_number":191,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":192,"context_line":"            operation\u003d\u0027get_replication_snapshot\u0027, datastore\u003dMANAGER)"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_c103d80f","line":190,"updated":"2014-08-05 10:40:38.000000000","message":"def get_replication_snapshot(self, context, snapshot_info):","commit_id":"db06fa4a21b1d717fecf7c2d936b3083267ceaeb"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"2ccb8c41cf74dd2432b40d9b1dca901959e5b092","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":192,"context_line":"            operation\u003d\u0027apply_overrides\u0027, datastore\u003dMANAGER)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def get_replication_snapshot(self, snapshot_info):"},{"line_number":195,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":196,"context_line":"            operation\u003d\u0027get_replication_snapshot\u0027, datastore\u003dMANAGER)"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_c8a1d03b","line":194,"updated":"2014-08-07 21:22:11.000000000","message":"signature is broken, context should exist as paramter in each managers function","commit_id":"3df9a9a16aad1addb3323f5c3e2814d671c3bed9"},{"author":{"_account_id":9749,"name":"Greg Lucas","email":"greg@glucas.net","username":"glucas"},"change_message_id":"601a17d26af04c94c54b6d372a92f1891101adfc","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":192,"context_line":"            operation\u003d\u0027apply_overrides\u0027, datastore\u003dMANAGER)"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    def get_replication_snapshot(self, snapshot_info):"},{"line_number":195,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":196,"context_line":"            operation\u003d\u0027get_replication_snapshot\u0027, datastore\u003dMANAGER)"},{"line_number":197,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_0a3b79c8","line":194,"in_reply_to":"baada198_c8a1d03b","updated":"2014-08-11 03:59:30.000000000","message":"Done for all the datastore manager.","commit_id":"3df9a9a16aad1addb3323f5c3e2814d671c3bed9"}],"trove/guestagent/datastore/couchbase/manager.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"a0d55248f7c3b1590e2d40deb29d78b5cc3d5e0a","unresolved":false,"context_lines":[{"line_number":210,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":211,"context_line":"            operation\u003d\u0027apply_overrides\u0027, datastore\u003dMANAGER)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def get_replication_snapshot(self, snapshot_info):"},{"line_number":214,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":215,"context_line":"            operation\u003d\u0027get_replication_snapshot\u0027, datastore\u003dMANAGER)"},{"line_number":216,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_8c09172e","line":213,"updated":"2014-08-05 10:40:38.000000000","message":"def get_replication_snapshot(self, context, snapshot_info):","commit_id":"db06fa4a21b1d717fecf7c2d936b3083267ceaeb"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"2ccb8c41cf74dd2432b40d9b1dca901959e5b092","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":215,"context_line":"            operation\u003d\u0027apply_overrides\u0027, datastore\u003dMANAGER)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def get_replication_snapshot(self, snapshot_info):"},{"line_number":218,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":219,"context_line":"            operation\u003d\u0027get_replication_snapshot\u0027, datastore\u003dMANAGER)"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_286a4ced","line":217,"updated":"2014-08-07 21:22:11.000000000","message":"same","commit_id":"3df9a9a16aad1addb3323f5c3e2814d671c3bed9"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9690a5be84fbdeaf446fe0b767c9d6f9f5775fdf","unresolved":false,"context_lines":[{"line_number":229,"context_line":"            operation\u003d\u0027detach_replication_slave\u0027, datastore\u003dMANAGER)"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"    def demote_replication_master(self, context):"},{"line_number":232,"context_line":"        LOG.debug(\"Demoting replication slave.\")"},{"line_number":233,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":234,"context_line":"            operation\u003d\u0027demote_replication_master\u0027, datastore\u003dMANAGER)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_7b79e27f","line":232,"updated":"2014-08-12 15:48:20.000000000","message":"replication master","commit_id":"433d40b124b95b4260a6a8b01bce1fd01ada78a6"}],"trove/guestagent/datastore/mongodb/manager.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"a0d55248f7c3b1590e2d40deb29d78b5cc3d5e0a","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":183,"context_line":"            operation\u003d\u0027apply_overrides\u0027, datastore\u003dMANAGER)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def get_replication_snapshot(self, snapshot_info):"},{"line_number":186,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":187,"context_line":"            operation\u003d\u0027get_replication_snapshot\u0027, datastore\u003dMANAGER)"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_ac0dfb38","line":185,"updated":"2014-08-05 10:40:38.000000000","message":"def get_replication_snapshot(self, context, snapshot_info):","commit_id":"db06fa4a21b1d717fecf7c2d936b3083267ceaeb"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"2ccb8c41cf74dd2432b40d9b1dca901959e5b092","unresolved":false,"context_lines":[{"line_number":182,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":183,"context_line":"            operation\u003d\u0027apply_overrides\u0027, datastore\u003dMANAGER)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def get_replication_snapshot(self, snapshot_info):"},{"line_number":186,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":187,"context_line":"            operation\u003d\u0027get_replication_snapshot\u0027, datastore\u003dMANAGER)"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_886ef8fc","line":185,"updated":"2014-08-07 21:22:11.000000000","message":"same","commit_id":"3df9a9a16aad1addb3323f5c3e2814d671c3bed9"}],"trove/guestagent/datastore/redis/manager.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"a0d55248f7c3b1590e2d40deb29d78b5cc3d5e0a","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":215,"context_line":"            operation\u003d\u0027is_root_enabled\u0027, datastore\u003dMANAGER)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def get_replication_snapshot(self, snapshot_info):"},{"line_number":218,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":219,"context_line":"            operation\u003d\u0027get_replication_snapshot\u0027, datastore\u003dMANAGER)"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"baada198_ec17f344","line":217,"updated":"2014-08-05 10:40:38.000000000","message":"def get_replication_snapshot(self, context, snapshot_info):","commit_id":"db06fa4a21b1d717fecf7c2d936b3083267ceaeb"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"2ccb8c41cf74dd2432b40d9b1dca901959e5b092","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":215,"context_line":"            operation\u003d\u0027is_root_enabled\u0027, datastore\u003dMANAGER)"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"    def get_replication_snapshot(self, snapshot_info):"},{"line_number":218,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":219,"context_line":"            operation\u003d\u0027get_replication_snapshot\u0027, datastore\u003dMANAGER)"},{"line_number":220,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_28416c63","line":217,"updated":"2014-08-07 21:22:11.000000000","message":"broken signature","commit_id":"3df9a9a16aad1addb3323f5c3e2814d671c3bed9"}],"trove/guestagent/strategies/backup/base.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"1ffbeca7e7f1ceb667407d87d0c75fb4e1c4e49c","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"from trove.guestagent.strategy import Strategy"},{"line_number":18,"context_line":"from trove.openstack.common import log as logging"},{"line_number":19,"context_line":"from trove.common import cfg, utils"},{"line_number":20,"context_line":"from eventlet.green import subprocess"},{"line_number":21,"context_line":"import os"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_ce35b447","line":18,"updated":"2014-08-18 11:49:54.000000000","message":"please re-organize imports in correct order.","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"}],"trove/guestagent/strategies/replication/base.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b3ce07d6c0e90e677d8cebff8adda68d38baa09d","unresolved":false,"context_lines":[{"line_number":36,"context_line":"        \"\"\"Get reference to master site for replication strategy.\"\"\""},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"    @abc.abstractmethod"},{"line_number":39,"context_line":"    def snapshot_for_replication(self, context, mysql_service, location,"},{"line_number":40,"context_line":"                                 snapshot_info):"},{"line_number":41,"context_line":"        \"\"\"Capture snapshot of master db.\"\"\""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_18d87e52","line":39,"updated":"2014-08-16 13:48:44.000000000","message":"this is a base service class, it should not contain datastore specific things, see \"mysql_service\"","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"}],"trove/guestagent/strategies/replication/mysql_binlog.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"2ccb8c41cf74dd2432b40d9b1dca901959e5b092","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2014 Tesora, Inc."},{"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"},{"line_number":5,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":6,"context_line":"#    a copy of the License at"},{"line_number":7,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_0831080a","line":4,"updated":"2014-08-07 21:22:11.000000000","message":"i guess it shouldn\u0027t be fixed between multiple patches?","commit_id":"3df9a9a16aad1addb3323f5c3e2814d671c3bed9"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9690a5be84fbdeaf446fe0b767c9d6f9f5775fdf","unresolved":false,"context_lines":[{"line_number":40,"context_line":"relay_log \u003d /var/lib/mysql/mysql-relay-bin.log"},{"line_number":41,"context_line":"\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"REPL_BACKUP_NAMESPACE \u003d \u0027trove.guestagent.strategies.backup.mysql_impl\u0027"},{"line_number":44,"context_line":"REPL_BACKUP_STRATEGY \u003d \u0027InnoBackupEx\u0027"},{"line_number":45,"context_line":"REPL_BACKUP_RUNNER \u003d backup.get_backup_strategy(REPL_BACKUP_STRATEGY,"},{"line_number":46,"context_line":"                                                REPL_BACKUP_NAMESPACE)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_9b5b1654","line":43,"updated":"2014-08-12 15:48:20.000000000","message":"if you need it, you would need to use CONF.backup_namespace","commit_id":"433d40b124b95b4260a6a8b01bce1fd01ada78a6"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9690a5be84fbdeaf446fe0b767c9d6f9f5775fdf","unresolved":false,"context_lines":[{"line_number":41,"context_line":"\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"REPL_BACKUP_NAMESPACE \u003d \u0027trove.guestagent.strategies.backup.mysql_impl\u0027"},{"line_number":44,"context_line":"REPL_BACKUP_STRATEGY \u003d \u0027InnoBackupEx\u0027"},{"line_number":45,"context_line":"REPL_BACKUP_RUNNER \u003d backup.get_backup_strategy(REPL_BACKUP_STRATEGY,"},{"line_number":46,"context_line":"                                                REPL_BACKUP_NAMESPACE)"},{"line_number":47,"context_line":"REPL_EXTRA_OPTS \u003d CONF.backup_runner_options.get(REPL_BACKUP_STRATEGY, \u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_bb6ffaf8","line":44,"updated":"2014-08-12 15:48:20.000000000","message":"This seems to be a potential place to fail.\nWe need to pin replication strategy to backup strategy, since we can\u0027t create slave by using innobackupex strategy with data backed up by mysqldump.","commit_id":"433d40b124b95b4260a6a8b01bce1fd01ada78a6"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9690a5be84fbdeaf446fe0b767c9d6f9f5775fdf","unresolved":false,"context_lines":[{"line_number":52,"context_line":"class MysqlBinlogReplication(base.Replication):"},{"line_number":53,"context_line":"    \"\"\"MySql Replication coordinated by binlog position.\"\"\""},{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    class UnableToDetermineBinlogPosition(exception.TroveError):"},{"line_number":56,"context_line":"        message \u003d _(\"Unable to determine binlog position \""},{"line_number":57,"context_line":"                    \"(from file %(binlog_file))\")"},{"line_number":58,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_1b9f0666","line":55,"updated":"2014-08-12 15:48:20.000000000","message":"do you really think that this place is appropriate for exception class?\n\ni know that this exception is very specific for bin_log strategy, but i really suggest to keep code consistent and place it where it belongs.","commit_id":"433d40b124b95b4260a6a8b01bce1fd01ada78a6"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9690a5be84fbdeaf446fe0b767c9d6f9f5775fdf","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    class UnableToDetermineBinlogPosition(exception.TroveError):"},{"line_number":56,"context_line":"        message \u003d _(\"Unable to determine binlog position \""},{"line_number":57,"context_line":"                    \"(from file %(binlog_file))\")"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def get_master_ref(self, mysql_service, snapshot_info):"},{"line_number":60,"context_line":"        master_ref \u003d {"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_9b923656","line":57,"updated":"2014-08-12 15:48:20.000000000","message":"missing period","commit_id":"433d40b124b95b4260a6a8b01bce1fd01ada78a6"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9690a5be84fbdeaf446fe0b767c9d6f9f5775fdf","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                                 location, snapshot_info):"},{"line_number":68,"context_line":"        snapshot_id \u003d snapshot_info[\u0027id\u0027]"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        storage \u003d get_storage_strategy("},{"line_number":71,"context_line":"            CONF.storage_strategy,"},{"line_number":72,"context_line":"            CONF.storage_namespace)(context)"},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_1bec6691","line":70,"updated":"2014-08-12 15:48:20.000000000","message":"I really don\u0027t like this, we\u0027ve creating another object each time we need to create backup or restore and now creating new slave.\n\nI\u0027d rather investigate how to prevent memory pollution. The easiest solution is to make it as singleton inside get_storage_strategy method.","commit_id":"433d40b124b95b4260a6a8b01bce1fd01ada78a6"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9690a5be84fbdeaf446fe0b767c9d6f9f5775fdf","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                    \u0027log_file\u0027: row[0],"},{"line_number":117,"context_line":"                    \u0027log_position\u0027: int(row[1])"},{"line_number":118,"context_line":"                }"},{"line_number":119,"context_line":"        except (IOError, IndexError) as ex:"},{"line_number":120,"context_line":"            LOG.exception(ex)"},{"line_number":121,"context_line":"            raise self.UnableToDetermineBinlogPosition("},{"line_number":122,"context_line":"                {\u0027info_file\u0027: INFO_FILE})"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_be0b6820","line":119,"updated":"2014-08-12 15:48:20.000000000","message":"i\u0027d suggesto to write file content into log file, at least it would be easier to grep`ing one file instead of tons for them","commit_id":"433d40b124b95b4260a6a8b01bce1fd01ada78a6"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b3ce07d6c0e90e677d8cebff8adda68d38baa09d","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import csv"},{"line_number":18,"context_line":"from trove.common import cfg"},{"line_number":19,"context_line":"from trove.common import exception"},{"line_number":20,"context_line":"from trove.common import utils as utils"},{"line_number":21,"context_line":"from trove.guestagent.backup.backupagent import BackupAgent"},{"line_number":22,"context_line":"from trove.guestagent.common import operating_system"},{"line_number":23,"context_line":"from trove.guestagent.strategies import backup"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_38dffa3c","line":20,"updated":"2014-08-16 13:48:44.000000000","message":"no need to assign alias that equals to the actual name","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"b02fa68e30fd650ce18b9016b590d969e21844f4","unresolved":false,"context_lines":[{"line_number":40,"context_line":"relay_log \u003d /var/lib/mysql/mysql-relay-bin.log"},{"line_number":41,"context_line":"\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"REPL_BACKUP_NAMESPACE \u003d \u0027trove.guestagent.strategies.backup.mysql_impl\u0027"},{"line_number":44,"context_line":"REPL_BACKUP_STRATEGY \u003d \u0027InnoBackupEx\u0027"},{"line_number":45,"context_line":"REPL_BACKUP_RUNNER \u003d backup.get_backup_strategy(REPL_BACKUP_STRATEGY,"},{"line_number":46,"context_line":"                                                REPL_BACKUP_NAMESPACE)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_6c3546f6","line":43,"updated":"2014-08-15 18:47:50.000000000","message":"I think we should use CONF values here.","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"964f552d3854f58c7eb323dd3f6141825faaee5d","unresolved":false,"context_lines":[{"line_number":40,"context_line":"relay_log \u003d /var/lib/mysql/mysql-relay-bin.log"},{"line_number":41,"context_line":"\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"REPL_BACKUP_NAMESPACE \u003d \u0027trove.guestagent.strategies.backup.mysql_impl\u0027"},{"line_number":44,"context_line":"REPL_BACKUP_STRATEGY \u003d \u0027InnoBackupEx\u0027"},{"line_number":45,"context_line":"REPL_BACKUP_RUNNER \u003d backup.get_backup_strategy(REPL_BACKUP_STRATEGY,"},{"line_number":46,"context_line":"                                                REPL_BACKUP_NAMESPACE)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_c2db81eb","line":43,"in_reply_to":"7ac7a964_6c3546f6","updated":"2014-08-15 19:33:01.000000000","message":"I specifically chose not to use CONF values here.  For now, we only support replication via InnoBackupEx.  We will look into this in the future when we better understand the impact (for example, enable_slave would need to be aware of which backup strategy was used, so we\u0027d need to figure out how to model that).","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b3ce07d6c0e90e677d8cebff8adda68d38baa09d","unresolved":false,"context_lines":[{"line_number":40,"context_line":"relay_log \u003d /var/lib/mysql/mysql-relay-bin.log"},{"line_number":41,"context_line":"\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"REPL_BACKUP_NAMESPACE \u003d \u0027trove.guestagent.strategies.backup.mysql_impl\u0027"},{"line_number":44,"context_line":"REPL_BACKUP_STRATEGY \u003d \u0027InnoBackupEx\u0027"},{"line_number":45,"context_line":"REPL_BACKUP_RUNNER \u003d backup.get_backup_strategy(REPL_BACKUP_STRATEGY,"},{"line_number":46,"context_line":"                                                REPL_BACKUP_NAMESPACE)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_78e892e2","line":43,"in_reply_to":"7ac7a964_6c3546f6","updated":"2014-08-16 13:48:44.000000000","message":"Icca, completely agreed.","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"d4314932d509819d66324c882fe86802d4fcc81a","unresolved":false,"context_lines":[{"line_number":40,"context_line":"relay_log \u003d /var/lib/mysql/mysql-relay-bin.log"},{"line_number":41,"context_line":"\"\"\""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"REPL_BACKUP_NAMESPACE \u003d \u0027trove.guestagent.strategies.backup.mysql_impl\u0027"},{"line_number":44,"context_line":"REPL_BACKUP_STRATEGY \u003d \u0027InnoBackupEx\u0027"},{"line_number":45,"context_line":"REPL_BACKUP_RUNNER \u003d backup.get_backup_strategy(REPL_BACKUP_STRATEGY,"},{"line_number":46,"context_line":"                                                REPL_BACKUP_NAMESPACE)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_a2484588","line":43,"in_reply_to":"7ac7a964_c2db81eb","updated":"2014-08-15 19:38:11.000000000","message":"Then we could have checks where if the conf is not InnoBackEx then throw error saying not supported.","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b3ce07d6c0e90e677d8cebff8adda68d38baa09d","unresolved":false,"context_lines":[{"line_number":54,"context_line":""},{"line_number":55,"context_line":"    class UnableToDetermineBinlogPosition(exception.TroveError):"},{"line_number":56,"context_line":"        message \u003d _(\"Unable to determine binlog position \""},{"line_number":57,"context_line":"                    \"(from file %(binlog_file))\")"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"    def get_master_ref(self, mysql_service, snapshot_info):"},{"line_number":60,"context_line":"        master_ref \u003d {"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_98e3ae04","line":57,"updated":"2014-08-16 13:48:44.000000000","message":"missing period.","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"1ffbeca7e7f1ceb667407d87d0c75fb4e1c4e49c","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"        # With streamed InnobackupEx, the log position is in"},{"line_number":78,"context_line":"        # the stream and will be decoded by the slave"},{"line_number":79,"context_line":"        log_position \u003d {}"},{"line_number":80,"context_line":"        return snapshot_id, log_position"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def enable_as_master(self, mysql_service, snapshot_info):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_6e9020ed","line":79,"updated":"2014-08-18 11:49:54.000000000","message":"accodring to the comments no need to additionally define log_position, just do:\n\n      return snapshot_id, {}","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"}],"trove/taskmanager/manager.py":[{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"addb94a81885b84a7e5579d93e1992457e555771","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                                       snapshot[\u0027dataset\u0027][\u0027snapshot_id\u0027],"},{"line_number":94,"context_line":"                                       availability_zone, root_password,"},{"line_number":95,"context_line":"                                       nics, overrides)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        instance_tasks.attach_replication_slave(snapshot)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def create_instance(self, context, instance_id, name, flavor,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_ecf161ce","line":96,"updated":"2014-08-15 14:05:57.000000000","message":"do we need to wait till active before attaching it as slave?","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"277ab0bcb794fea78678de96cdac3220be1f30a4","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                                       snapshot[\u0027dataset\u0027][\u0027snapshot_id\u0027],"},{"line_number":94,"context_line":"                                       availability_zone, root_password,"},{"line_number":95,"context_line":"                                       nics, overrides)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        instance_tasks.attach_replication_slave(snapshot)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def create_instance(self, context, instance_id, name, flavor,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_d507c81b","line":96,"in_reply_to":"7ac7a964_72de0a41","updated":"2014-08-15 15:20:19.000000000","message":"I agree with you on it being a poor band aid. Open to other suggestions.","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"f194f8a8fd61bbfcd560670b9adc1e77b1c45c7d","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                                       snapshot[\u0027dataset\u0027][\u0027snapshot_id\u0027],"},{"line_number":94,"context_line":"                                       availability_zone, root_password,"},{"line_number":95,"context_line":"                                       nics, overrides)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        instance_tasks.attach_replication_slave(snapshot)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def create_instance(self, context, instance_id, name, flavor,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_afaf5be2","line":96,"in_reply_to":"7ac7a964_acd129fd","updated":"2014-08-15 14:23:09.000000000","message":"I have been hitting race condition where restore is not complete and attach slave call is issued. increasing timeouts is not doing much for me either.","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"5d5f052ae7cdead74d27a35bff0db85a89d320c6","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                                       snapshot[\u0027dataset\u0027][\u0027snapshot_id\u0027],"},{"line_number":94,"context_line":"                                       availability_zone, root_password,"},{"line_number":95,"context_line":"                                       nics, overrides)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        instance_tasks.attach_replication_slave(snapshot)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def create_instance(self, context, instance_id, name, flavor,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_72de0a41","line":96,"in_reply_to":"7ac7a964_afaf5be2","updated":"2014-08-15 14:50:21.000000000","message":"Right.  create_instance does wait for the instance to go ACTIVE before returning, but in the case of a timeout it just eats the exception.  Polling waiting for ACTIVE again is really just a band-aid, and a poor one at that.  I\u0027m investigating a smarter way of waiting for things.","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":9782,"name":"Morgan Jones","email":"morgan@tesora.com","username":"vgnbkr"},"change_message_id":"17c6a5153fe1d64bd10d06d137a03147e4da4230","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                                       snapshot[\u0027dataset\u0027][\u0027snapshot_id\u0027],"},{"line_number":94,"context_line":"                                       availability_zone, root_password,"},{"line_number":95,"context_line":"                                       nics, overrides)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        instance_tasks.attach_replication_slave(snapshot)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def create_instance(self, context, instance_id, name, flavor,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_acd129fd","line":96,"in_reply_to":"7ac7a964_ecf161ce","updated":"2014-08-15 14:13:05.000000000","message":"I don\u0027t think there is any requirement that the instance be active.  Did you have something in mind?","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b3ce07d6c0e90e677d8cebff8adda68d38baa09d","unresolved":false,"context_lines":[{"line_number":93,"context_line":"                                       snapshot[\u0027dataset\u0027][\u0027snapshot_id\u0027],"},{"line_number":94,"context_line":"                                       availability_zone, root_password,"},{"line_number":95,"context_line":"                                       nics, overrides)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        instance_tasks.attach_replication_slave(snapshot)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def create_instance(self, context, instance_id, name, flavor,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_b804eac0","line":96,"in_reply_to":"7ac7a964_ecf161ce","updated":"2014-08-16 13:48:44.000000000","message":"Yes, this is not a strict requirement. But if we\u0027ll do something that would ingore polling we would obtain instance that hangs in BUILD state.\n\nSo, the simple answer - yes, we should wait to ensure that slave was provisioned properly. \n\n\nAnother case that i can see here, it\u0027s timeout (provisioning timeout smaller than restore timeout). Maybe we should concider about proposing dynamic timeout, that depends on network latency and backup/snapshot size.","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b3ce07d6c0e90e677d8cebff8adda68d38baa09d","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                                       availability_zone, root_password,"},{"line_number":95,"context_line":"                                       nics, overrides)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        instance_tasks.attach_replication_slave(snapshot)"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def create_instance(self, context, instance_id, name, flavor,"},{"line_number":100,"context_line":"                        image_id, databases, users, datastore_manager,"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_582bd62f","line":97,"updated":"2014-08-16 13:48:44.000000000","message":"We have to wait for slave to become ACTIVE to avoid sending rpc call that would neven be consumed because slave wasn\u0027t provisioned properly.","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"cfaca09ccbfe5b3a9694f21420a04602408d8276","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                                           flavor, image_id, databases, users,"},{"line_number":106,"context_line":"                                           datastore_manager, packages,"},{"line_number":107,"context_line":"                                           volume_size,"},{"line_number":108,"context_line":"                                           availability_zone, root_password,"},{"line_number":109,"context_line":"                                           nics, overrides, slave_of_id)"},{"line_number":110,"context_line":"        else:"},{"line_number":111,"context_line":"            instance_tasks \u003d FreshInstanceTasks.load(context, instance_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_f8d06ef9","line":108,"updated":"2014-08-18 13:48:59.000000000","message":"Do we want to delete the snapshot once the slave has been created?","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"4be922d54fe3c5b9a6c7afb9964eb2a426a5f3dc","unresolved":false,"context_lines":[{"line_number":105,"context_line":"                                           flavor, image_id, databases, users,"},{"line_number":106,"context_line":"                                           datastore_manager, packages,"},{"line_number":107,"context_line":"                                           volume_size,"},{"line_number":108,"context_line":"                                           availability_zone, root_password,"},{"line_number":109,"context_line":"                                           nics, overrides, slave_of_id)"},{"line_number":110,"context_line":"        else:"},{"line_number":111,"context_line":"            instance_tasks \u003d FreshInstanceTasks.load(context, instance_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_b4a195ab","line":108,"in_reply_to":"1abeadc6_f8d06ef9","updated":"2014-08-18 18:31:15.000000000","message":"That\u0027s the same concenr that i\u0027ve raised few days ago. Since snapshot(backup, etc.) is nothing else that service needs(to enable replication between M and S) we must remove it. And we should not use user\u0027s quotas.\n\nIt terms of billing i can forsee huge issue here. From user perspective i want to provisiong replica set by spinning up another one on Trove instance(VM, volume), why should i pay for use of Swift storage (even if payment takes place per month)?\n\nI can see two ways to fix this:\n\n1. We need to notify user that slave attachment involves use of Swift storage(use of which will be mentioned in the next user\u0027s invoice).\n\n2. Expect that trove-taskmanager can act with rights of different tenant, and store each snapshot in side storage(undercloud Swift). In this case user\u0027s invoice will be free from \"magic\" backup that appears to exist while replication set provisioning.","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"}],"trove/taskmanager/models.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"9690a5be84fbdeaf446fe0b767c9d6f9f5775fdf","unresolved":false,"context_lines":[{"line_number":302,"context_line":"            except InvalidModelError as e:"},{"line_number":303,"context_line":"                msg \u003d (_(\"Unable to create replication snapshot record for \""},{"line_number":304,"context_line":"                         \"instance: %s\") % self.id)"},{"line_number":305,"context_line":"                LOG.exception(msg)"},{"line_number":306,"context_line":"                raise BackupCreationError(msg)"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"            master \u003d BuiltInstanceTasks.load(context, slave_of_id)"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_fe3fa0af","line":305,"updated":"2014-08-12 15:48:20.000000000","message":"you need to mark backup record as failed, because it will stuck in NEW state.","commit_id":"433d40b124b95b4260a6a8b01bce1fd01ada78a6"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b3ce07d6c0e90e677d8cebff8adda68d38baa09d","unresolved":false,"context_lines":[{"line_number":298,"context_line":"                \u0027datastore_version_id\u0027: self.datastore_version.id,"},{"line_number":299,"context_line":"                \u0027deleted\u0027: False"},{"line_number":300,"context_line":"            }"},{"line_number":301,"context_line":"            try:"},{"line_number":302,"context_line":"                db_info \u003d DBBackup.create(**snapshot_info)"},{"line_number":303,"context_line":"            except InvalidModelError as e:"},{"line_number":304,"context_line":"                msg \u003d (_(\"Unable to create replication snapshot record for \""}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_58b916e8","line":301,"updated":"2014-08-16 13:48:44.000000000","message":"You can remove this try/except block and move exception expectation to line #317.\n\nAnd i don\u0027t see case when this would fail, since you\u0027re generating attributes correctly, so, it can\u0027t go wrong.","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b3ce07d6c0e90e677d8cebff8adda68d38baa09d","unresolved":false,"context_lines":[{"line_number":302,"context_line":"                db_info \u003d DBBackup.create(**snapshot_info)"},{"line_number":303,"context_line":"            except InvalidModelError as e:"},{"line_number":304,"context_line":"                msg \u003d (_(\"Unable to create replication snapshot record for \""},{"line_number":305,"context_line":"                         \"instance: %s\") % self.id)"},{"line_number":306,"context_line":"                LOG.exception(msg)"},{"line_number":307,"context_line":"                raise BackupCreationError(msg)"},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_f8bbc2e2","line":305,"updated":"2014-08-16 13:48:44.000000000","message":"missing period.","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"1ffbeca7e7f1ceb667407d87d0c75fb4e1c4e49c","unresolved":false,"context_lines":[{"line_number":868,"context_line":"        def _get_replication_snapshot():"},{"line_number":869,"context_line":"            LOG.debug(\"Calling get_replication_snapshot on %s.\", self.id)"},{"line_number":870,"context_line":"            try:"},{"line_number":871,"context_line":"                result \u003d self.guest.get_replication_snapshot(snapshot_info)"},{"line_number":872,"context_line":"                LOG.debug(\"Got replication snapshot from guest successfully.\")"},{"line_number":873,"context_line":"                return result"},{"line_number":874,"context_line":"            except (GuestError, GuestTimeout):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_114b4d2c","line":871,"updated":"2014-08-18 11:49:54.000000000","message":"this is potential break place once we have master that has lots of Gb\u0027s of data.\nWe should not use RPC CALL method, because we can potentially fall into RPC Timeout.\n\nAs i can see we should do what we\u0027ve did with backup API. We need to use RPC CAST and poll backup status(expecting two statuses: COMPLETED/FAILED), at taskmanager site, until it\u0027s ready.\nAnother concern against RPC CALL: what if while we expecting for a response from guest AMPQ service will go down? How do we handle it? With give code - we\u0027re not doing anything (at the end we would have a backup record that hangs in NEW state).","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"b3ce07d6c0e90e677d8cebff8adda68d38baa09d","unresolved":false,"context_lines":[{"line_number":876,"context_line":"                              self.id)"},{"line_number":877,"context_line":"                raise"},{"line_number":878,"context_line":""},{"line_number":879,"context_line":"        return run_with_quotas(self.context.tenant, {\u0027backups\u0027: 1},"},{"line_number":880,"context_line":"                               _get_replication_snapshot)"},{"line_number":881,"context_line":""},{"line_number":882,"context_line":"    def reboot(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_78cfb27f","line":879,"updated":"2014-08-16 13:48:44.000000000","message":"I see potential issue here, since you\u0027ve created a backup with taking quotas into account, you would need to delete it once slave is up and running.","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"96aa8399ebc954471f8794f2f64d9a9d5fa51c5a","unresolved":false,"context_lines":[{"line_number":876,"context_line":"                              self.id)"},{"line_number":877,"context_line":"                raise"},{"line_number":878,"context_line":""},{"line_number":879,"context_line":"        return run_with_quotas(self.context.tenant, {\u0027backups\u0027: 1},"},{"line_number":880,"context_line":"                               _get_replication_snapshot)"},{"line_number":881,"context_line":""},{"line_number":882,"context_line":"    def reboot(self):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_d89b6670","line":879,"in_reply_to":"7ac7a964_78cfb27f","updated":"2014-08-16 13:55:22.000000000","message":"Actually, i\u0027m not even sure that we should envolve quotas.\nSnapshot(backup), in this case, is nothing else that service needs. So, we shouldn\u0027t not modify user quotas since because it\u0027s our desicion to make slave provisioning with taking a backup from master, user should not spend his money because of us.\n\nSo, i\u0027d suggest to remove quota modifications from here at all and fix issue described by the comment above.","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"0579698f065109d238b74785c18c0dd2bf248b14","unresolved":false,"context_lines":[{"line_number":302,"context_line":"            db_info \u003d DBBackup.create(**snapshot_info)"},{"line_number":303,"context_line":"        except InvalidModelError as e:"},{"line_number":304,"context_line":"            msg \u003d (_(\"Unable to create replication snapshot record for \""},{"line_number":305,"context_line":"                     \"instance: %s\") % self.id)"},{"line_number":306,"context_line":"            LOG.exception(msg)"},{"line_number":307,"context_line":"            raise BackupCreationError(msg)"},{"line_number":308,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_21cb49a6","line":305,"updated":"2014-08-27 09:04:20.000000000","message":"minor nit, missing period.","commit_id":"1c23f89601d1730c72f5d2a0ff1f84fd5e494c88"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"0579698f065109d238b74785c18c0dd2bf248b14","unresolved":false,"context_lines":[{"line_number":869,"context_line":"        def _get_replication_snapshot():"},{"line_number":870,"context_line":"            LOG.debug(\"Calling get_replication_snapshot on %s.\", self.id)"},{"line_number":871,"context_line":"            try:"},{"line_number":872,"context_line":"                result \u003d self.guest.get_replication_snapshot(snapshot_info)"},{"line_number":873,"context_line":"                LOG.debug(\"Got replication snapshot from guest successfully.\")"},{"line_number":874,"context_line":"                return result"},{"line_number":875,"context_line":"            except (GuestError, GuestTimeout):"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_41b845e5","line":872,"updated":"2014-08-27 09:04:20.000000000","message":"Due to previos comments.\nhttps://bugs.launchpad.net/trove/+bug/1362062","commit_id":"1c23f89601d1730c72f5d2a0ff1f84fd5e494c88"}],"trove/tests/api/replication.py":[{"author":{"_account_id":4463,"name":"iccha-sethi","email":"iccha.sethi@rackspace.com","username":"iccha-sethi"},"change_message_id":"47cfbc43cd90a20ae828f49cee1d60c66c1d9a89","unresolved":false,"context_lines":[{"line_number":68,"context_line":"                return True"},{"line_number":69,"context_line":"            else:"},{"line_number":70,"context_line":"                assert_true(instance.status in [\u0027BUILD\u0027, \u0027BACKUP\u0027])"},{"line_number":71,"context_line":"                # if instance_info.volume is not None:"},{"line_number":72,"context_line":"                #     assert_equal(instance.volume.get(\u0027used\u0027, None), None)"},{"line_number":73,"context_line":"                return False"},{"line_number":74,"context_line":"        poll_until(result_is_active)"}],"source_content_type":"text/x-python","patch_set":11,"id":"1abeadc6_b165c31f","line":71,"updated":"2014-08-20 19:24:42.000000000","message":"comments :)","commit_id":"8b8100e0db387d300c34802e0baf7235e42aedc3"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"0579698f065109d238b74785c18c0dd2bf248b14","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                return True"},{"line_number":76,"context_line":"            else:"},{"line_number":77,"context_line":"                assert_true(instance.status in [\u0027BUILD\u0027, \u0027BACKUP\u0027])"},{"line_number":78,"context_line":"                # if instance_info.volume is not None:"},{"line_number":79,"context_line":"                #     assert_equal(instance.volume.get(\u0027used\u0027, None), None)"},{"line_number":80,"context_line":"                return False"},{"line_number":81,"context_line":"        poll_until(result_is_active)"}],"source_content_type":"text/x-python","patch_set":12,"id":"1abeadc6_e1a151aa","line":78,"updated":"2014-08-27 09:04:20.000000000","message":"comments still there","commit_id":"1c23f89601d1730c72f5d2a0ff1f84fd5e494c88"}]}
