)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"e932f23af12a377df517b3de5463d50c165b4311","unresolved":false,"context_lines":[{"line_number":19,"context_line":"./redstack install"},{"line_number":20,"context_line":"./redstack kick-start redis"},{"line_number":21,"context_line":"(vi /etc/trove/test.conf and change volume_support to false)"},{"line_number":22,"context_line":"./redstack int-tests --group\u003dbackup (or --group\u003dredis_supported)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Co-Authored-by: hardy.jung \u003chardy.jung@daumkakao.com\u003e"},{"line_number":25,"context_line":"Co-Authored-by: Peter Stachowski \u003cpeter@tesora.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"da20952f_7bcd9285","line":22,"range":{"start_line":22,"start_character":48,"end_line":22,"end_character":63},"updated":"2015-09-01 17:43:50.000000000","message":"looks like you changed everything to {datastore}_group instead of {datastore}_supported","commit_id":"662eecef8dad8ecea8155ad085dcf3dfba3863f7"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"e28f05dd3b9ee63de8c66ee424aca20c69604f97","unresolved":false,"context_lines":[{"line_number":19,"context_line":"./redstack install"},{"line_number":20,"context_line":"./redstack kick-start redis"},{"line_number":21,"context_line":"(vi /etc/trove/test.conf and change volume_support to false)"},{"line_number":22,"context_line":"./redstack int-tests --group\u003dbackup (or --group\u003dredis_supported)"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Co-Authored-by: hardy.jung \u003chardy.jung@daumkakao.com\u003e"},{"line_number":25,"context_line":"Co-Authored-by: Peter Stachowski \u003cpeter@tesora.com\u003e"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"da20952f_8957ee25","line":22,"range":{"start_line":22,"start_character":48,"end_line":22,"end_character":63},"in_reply_to":"da20952f_7bcd9285","updated":"2015-09-01 23:04:05.000000000","message":"yeah, that was a mistake (must have took the wrong side of the merge conflict).  I can fix this here (or preferably in the replication changeset, still to come ;) )","commit_id":"662eecef8dad8ecea8155ad085dcf3dfba3863f7"}],"etc/trove/trove-guestagent.conf.sample":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"f9b4c1ab651a96eced503cd9770ebc76501edd34","unresolved":false,"context_lines":[{"line_number":133,"context_line":"# guestagent_strategy \u003d trove.common.strategies.cluster.experimental.vertica.guestagent.VerticaGuestAgentStrategy"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"[redis]"},{"line_number":136,"context_line":""},{"line_number":137,"context_line":"# For redis, the following are the defaults for backup, and restore:"},{"line_number":138,"context_line":"# backup_strategy \u003d RedisBackup"},{"line_number":139,"context_line":"# backup_namespace \u003d trove.guestagent.strategies.backup.experimental.redis_impl"}],"source_content_type":"application/octet-stream","patch_set":7,"id":"fa32b979_0b7013a3","line":136,"updated":"2015-06-24 12:27:43.000000000","message":"is this blank line needed?\n\nconventionally, ini files don\u0027t have a blank line after a section start.","commit_id":"159def181396300df0df87c75b591b90328c4646"}],"trove/guestagent/datastore/experimental/redis/manager.py":[{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"591df60c6530aa95f9662077e0dc011322d41822","unresolved":false,"context_lines":[{"line_number":150,"context_line":"        This will eventually create a backup. Right now"},{"line_number":151,"context_line":"        it does nothing."},{"line_number":152,"context_line":"        \"\"\""},{"line_number":153,"context_line":"        LOG.debug(\"Create Backup called.\")"},{"line_number":154,"context_line":"        raise exception.DatastoreOperationNotSupported("},{"line_number":155,"context_line":"            operation\u003d\u0027create_backup\u0027, datastore\u003dMANAGER)"},{"line_number":156,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_ae029f3c","side":"PARENT","line":153,"updated":"2015-05-27 10:14:27.000000000","message":"No need to remove this debug log","commit_id":"ce2d2c4e5ae5ddcfc78f636748186a65048c5cad"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"f9b4c1ab651a96eced503cd9770ebc76501edd34","unresolved":false,"context_lines":[{"line_number":106,"context_line":"            app.write_config(config_contents)"},{"line_number":107,"context_line":"            app.restart()"},{"line_number":108,"context_line":"            LOG.info(_(\u0027Redis instance has been setup and configured.\u0027))"},{"line_number":109,"context_line":"            if backup_info:"},{"line_number":110,"context_line":"                persistence_dir \u003d service.get_persistence_dir(force_load\u003dTrue)"},{"line_number":111,"context_line":"                if mount_point and persistence_dir !\u003d mount_point:"},{"line_number":112,"context_line":"                    LOG.warning(_("}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_cbc22b85","line":109,"updated":"2015-06-24 12:27:43.000000000","message":"please move the backup block before you start the database ;)","commit_id":"159def181396300df0df87c75b591b90328c4646"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"f9b4c1ab651a96eced503cd9770ebc76501edd34","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            app.restart()"},{"line_number":108,"context_line":"            LOG.info(_(\u0027Redis instance has been setup and configured.\u0027))"},{"line_number":109,"context_line":"            if backup_info:"},{"line_number":110,"context_line":"                persistence_dir \u003d service.get_persistence_dir(force_load\u003dTrue)"},{"line_number":111,"context_line":"                if mount_point and persistence_dir !\u003d mount_point:"},{"line_number":112,"context_line":"                    LOG.warning(_("},{"line_number":113,"context_line":"                        \u0027Redis persistence dir (%(per)s) is different from \u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_4b0b7bd6","line":110,"updated":"2015-06-24 12:27:43.000000000","message":"so, this layering of get_persistence_dir() seems a bit sub-optimal.\n\nEvery person who wants to use this get_persistence_dir() now needs to perform the check for persistence dir and mount point, no?\n\nWhy not bury this check in get_persistence_dir()?\n\nIs it safe to use persistence_dir instead of mount_point? What if mount_point points to a location that is totally different from persistence dir?","commit_id":"159def181396300df0df87c75b591b90328c4646"}],"trove/guestagent/datastore/experimental/redis/service.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"81b0d2c7773d5b31787db29269cb8c6295bd8a70","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import os"},{"line_number":17,"context_line":"import time"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_concurrency.processutils import UnknownArgumentError"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_450e583c","line":17,"updated":"2015-06-16 12:16:42.000000000","message":"PEP8 F401 - imported but not used.","commit_id":"149ef5ecd99e17c17027bfa8ab6397c327660780"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"bba784c04b00cd230f0262a8da6de3df7bf61bb2","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import os"},{"line_number":17,"context_line":"import time"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from oslo_concurrency.processutils import UnknownArgumentError"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_8a2c6103","line":17,"in_reply_to":"fa32b979_450e583c","updated":"2015-06-16 18:30:56.000000000","message":"Done","commit_id":"149ef5ecd99e17c17027bfa8ab6397c327660780"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"81b0d2c7773d5b31787db29269cb8c6295bd8a70","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                REDIS_OPTIONS.update({opt[0]: \u0027 \u0027.join(opt[1:])})"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def get_persistence_dir(force_load\u003dFalse):"},{"line_number":57,"context_line":"    \"\"\""},{"line_number":58,"context_line":"    Retrieve the persistence directory from the Redis configuration"},{"line_number":59,"context_line":"    file.  Uses sane (Ubuntu) default if value not found."}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_f02acc7d","line":56,"updated":"2015-06-16 12:16:42.000000000","message":"Can we keep this methods as part of Redis App?","commit_id":"149ef5ecd99e17c17027bfa8ab6397c327660780"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"bba784c04b00cd230f0262a8da6de3df7bf61bb2","unresolved":false,"context_lines":[{"line_number":53,"context_line":"                REDIS_OPTIONS.update({opt[0]: \u0027 \u0027.join(opt[1:])})"},{"line_number":54,"context_line":""},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"def get_persistence_dir(force_load\u003dFalse):"},{"line_number":57,"context_line":"    \"\"\""},{"line_number":58,"context_line":"    Retrieve the persistence directory from the Redis configuration"},{"line_number":59,"context_line":"    file.  Uses sane (Ubuntu) default if value not found."}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_93625cac","line":56,"in_reply_to":"fa32b979_f02acc7d","updated":"2015-06-16 18:30:56.000000000","message":"I\u0027m going to refactor this to use the Redis client that\u0027s coming down the pipe in the configuration group patchset, so probably doesn\u0027t make sense to do much more here at the moment - see https://review.openstack.org/#/c/191860/","commit_id":"149ef5ecd99e17c17027bfa8ab6397c327660780"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"81b0d2c7773d5b31787db29269cb8c6295bd8a70","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    timeout \u003d kwargs.pop(\u0027timeout\u0027, 30)"},{"line_number":80,"context_line":"    force_load \u003d kwargs.pop(\u0027force_load\u0027, False)"},{"line_number":81,"context_line":"    if kwargs:"},{"line_number":82,"context_line":"        raise UnknownArgumentError(_(\u0027Got unknown keyword args: %r\u0027) % kwargs)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    load_redis_options(force_load)"},{"line_number":85,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_103650e6","line":82,"updated":"2015-06-16 12:16:42.000000000","message":"missing period","commit_id":"149ef5ecd99e17c17027bfa8ab6397c327660780"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"bba784c04b00cd230f0262a8da6de3df7bf61bb2","unresolved":false,"context_lines":[{"line_number":79,"context_line":"    timeout \u003d kwargs.pop(\u0027timeout\u0027, 30)"},{"line_number":80,"context_line":"    force_load \u003d kwargs.pop(\u0027force_load\u0027, False)"},{"line_number":81,"context_line":"    if kwargs:"},{"line_number":82,"context_line":"        raise UnknownArgumentError(_(\u0027Got unknown keyword args: %r\u0027) % kwargs)"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    load_redis_options(force_load)"},{"line_number":85,"context_line":"    try:"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_8b78e090","line":82,"in_reply_to":"fa32b979_103650e6","updated":"2015-06-16 18:30:56.000000000","message":"Done","commit_id":"149ef5ecd99e17c17027bfa8ab6397c327660780"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"81b0d2c7773d5b31787db29269cb8c6295bd8a70","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                key, section))"},{"line_number":130,"context_line":"        return current_value \u003d\u003d wait_value"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    utils.poll_until(_check_status, time_out\u003dtimeout)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class RedisAppStatus(service.BaseDbStatus):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_f0788c91","line":132,"updated":"2015-06-16 12:16:42.000000000","message":"pollster exception handler is required","commit_id":"149ef5ecd99e17c17027bfa8ab6397c327660780"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"bba784c04b00cd230f0262a8da6de3df7bf61bb2","unresolved":false,"context_lines":[{"line_number":129,"context_line":"                key, section))"},{"line_number":130,"context_line":"        return current_value \u003d\u003d wait_value"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    utils.poll_until(_check_status, time_out\u003dtimeout)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"class RedisAppStatus(service.BaseDbStatus):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_cb726849","line":132,"in_reply_to":"fa32b979_f0788c91","updated":"2015-06-16 18:30:56.000000000","message":"Done","commit_id":"149ef5ecd99e17c17027bfa8ab6397c327660780"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"f9b4c1ab651a96eced503cd9770ebc76501edd34","unresolved":false,"context_lines":[{"line_number":55,"context_line":"def get_persistence_dir(force_load\u003dFalse):"},{"line_number":56,"context_line":"    \"\"\""},{"line_number":57,"context_line":"    Retrieve the persistence directory from the Redis configuration"},{"line_number":58,"context_line":"    file.  Uses sane (Ubuntu) default if value not found."},{"line_number":59,"context_line":"    \"\"\""},{"line_number":60,"context_line":"    load_redis_options(force_load)"},{"line_number":61,"context_line":"    return REDIS_OPTIONS.get("}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_2b907742","line":58,"updated":"2015-06-24 12:27:43.000000000","message":"so, is this routine OS specific?","commit_id":"159def181396300df0df87c75b591b90328c4646"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"f9b4c1ab651a96eced503cd9770ebc76501edd34","unresolved":false,"context_lines":[{"line_number":65,"context_line":"def build_persistence_filename(force_load\u003dFalse):"},{"line_number":66,"context_line":"    \"\"\""},{"line_number":67,"context_line":"    Create the persistence filename based on the values in the Redis conf"},{"line_number":68,"context_line":"    file.  Uses sane (Ubuntu) defaults if values not found."},{"line_number":69,"context_line":"    \"\"\""},{"line_number":70,"context_line":"    load_redis_options(force_load)"},{"line_number":71,"context_line":"    persistence_dir \u003d get_persistence_dir()"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_0b9b3367","line":68,"updated":"2015-06-24 12:27:43.000000000","message":"is this routine OS specific?","commit_id":"159def181396300df0df87c75b591b90328c4646"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"f9b4c1ab651a96eced503cd9770ebc76501edd34","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    load_redis_options(force_load)"},{"line_number":84,"context_line":"    try:"},{"line_number":85,"context_line":"        if \u0027requirepass\u0027 in REDIS_OPTIONS:"},{"line_number":86,"context_line":"            LOG.debug(\"Password is set, running \u0027%s\u0027 with password.\" % ("},{"line_number":87,"context_line":"                \u0027 \u0027.join(cmds)))"},{"line_number":88,"context_line":"            out, err \u003d utils.execute_with_timeout("},{"line_number":89,"context_line":"                system.REDIS_CLI,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_8bec23bc","line":86,"updated":"2015-06-24 12:27:43.000000000","message":"this could be quite verbose?","commit_id":"159def181396300df0df87c75b591b90328c4646"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"f9b4c1ab651a96eced503cd9770ebc76501edd34","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                root_helper\u003d\u0027sudo\u0027,"},{"line_number":95,"context_line":"                timeout\u003dtimeout)"},{"line_number":96,"context_line":"        else:"},{"line_number":97,"context_line":"            LOG.debug(\"Password not set, running \u0027%s\u0027 without password.\" % ("},{"line_number":98,"context_line":"                \u0027 \u0027.join(cmds)))"},{"line_number":99,"context_line":"            out, err \u003d utils.execute_with_timeout("},{"line_number":100,"context_line":"                system.REDIS_CLI,"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_4b313b59","line":97,"updated":"2015-06-24 12:27:43.000000000","message":"ditto","commit_id":"159def181396300df0df87c75b591b90328c4646"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"f9b4c1ab651a96eced503cd9770ebc76501edd34","unresolved":false,"context_lines":[{"line_number":103,"context_line":"                root_helper\u003d\u0027sudo\u0027,"},{"line_number":104,"context_line":"                timeout\u003dtimeout)"},{"line_number":105,"context_line":"    except exception.ProcessExecutionError as ex:"},{"line_number":106,"context_line":"        LOG.exception(_(\"Could not execute \u0027%s\u0027 using Redis CLI.\") % ("},{"line_number":107,"context_line":"            \u0027 \u0027.join(cmds)))"},{"line_number":108,"context_line":"        raise ex"},{"line_number":109,"context_line":"    return out, err"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_eb7fefdc","line":106,"updated":"2015-06-24 12:27:43.000000000","message":"this is a security hole. Since \"-a\" is not a recognized modifier to mask_password() this password will show up in err unsanitized.","commit_id":"159def181396300df0df87c75b591b90328c4646"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"f9b4c1ab651a96eced503cd9770ebc76501edd34","unresolved":false,"context_lines":[{"line_number":114,"context_line":""},{"line_number":115,"context_line":"    def _check_status():"},{"line_number":116,"context_line":"        current_value \u003d None"},{"line_number":117,"context_line":"        out, err \u003d execute_redis_command(\u0027INFO\u0027, section)"},{"line_number":118,"context_line":"        lines \u003d out.splitlines()"},{"line_number":119,"context_line":"        for line in lines:"},{"line_number":120,"context_line":"            if key in line:"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_ebcdaf30","line":117,"updated":"2015-06-24 12:27:43.000000000","message":"exceptions?","commit_id":"159def181396300df0df87c75b591b90328c4646"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"f9b4c1ab651a96eced503cd9770ebc76501edd34","unresolved":false,"context_lines":[{"line_number":173,"context_line":"            LOG.info(_(\u0027Redis Service Status is RUNNING.\u0027))"},{"line_number":174,"context_line":"            return rd_instance.ServiceStatuses.RUNNING"},{"line_number":175,"context_line":"        except exception.ProcessExecutionError:"},{"line_number":176,"context_line":"            pass"},{"line_number":177,"context_line":"        if \u0027PONG\u0027 not in out:"},{"line_number":178,"context_line":"            try:"},{"line_number":179,"context_line":"                out, err \u003d utils.execute_with_timeout("}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_8bf6635b","line":176,"updated":"2015-06-24 12:27:43.000000000","message":"oh?","commit_id":"159def181396300df0df87c75b591b90328c4646"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"2752f55bc7628b823ae6eaf11a9ab7a7eeb7023e","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"    def get_persistence_filepath(self):"},{"line_number":320,"context_line":"        \"\"\"Returns the full path to the persistence file.\"\"\""},{"line_number":321,"context_line":"        return \u0027%s/%s\u0027 % (self.get_working_dir(), self.get_db_filename())"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    def get_auth_password(self):"},{"line_number":324,"context_line":"        \"\"\"Client authentication password for this instance or None if not set."}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_87026908","line":321,"updated":"2015-07-30 16:23:24.000000000","message":"You could potentially use guestagent_utils.build_file_path(...) for this","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"d7c0cb69d8657ee080b119f36ee0ca5f7690d97d","unresolved":false,"context_lines":[{"line_number":318,"context_line":""},{"line_number":319,"context_line":"    def get_persistence_filepath(self):"},{"line_number":320,"context_line":"        \"\"\"Returns the full path to the persistence file.\"\"\""},{"line_number":321,"context_line":"        return \u0027%s/%s\u0027 % (self.get_working_dir(), self.get_db_filename())"},{"line_number":322,"context_line":""},{"line_number":323,"context_line":"    def get_auth_password(self):"},{"line_number":324,"context_line":"        \"\"\"Client authentication password for this instance or None if not set."}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_ec4d459a","line":321,"in_reply_to":"3a50d1a3_87026908","updated":"2015-07-30 22:18:01.000000000","message":"Done","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"a701c92e0bc528fa75e83b7d32a87385a037d117","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                LOG.debug(\"Found \u0027%s\u0027 for field %s.\" % (current_value, key))"},{"line_number":440,"context_line":"            else:"},{"line_number":441,"context_line":"                LOG.error(_(\u0027Output from Redis command: %s\u0027) % redis_info)"},{"line_number":442,"context_line":"                raise RuntimeError(\"Field %s not found (Section: \u0027%s\u0027).\" % ("},{"line_number":443,"context_line":"                    key, section))"},{"line_number":444,"context_line":"            return current_value \u003d\u003d wait_value"},{"line_number":445,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_9f2d25aa","line":442,"updated":"2015-07-29 08:04:24.000000000","message":"Internationalization needed for exception.","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"604015e37e8aba6e361d1e4cb708fe672470394f","unresolved":false,"context_lines":[{"line_number":439,"context_line":"                LOG.debug(\"Found \u0027%s\u0027 for field %s.\" % (current_value, key))"},{"line_number":440,"context_line":"            else:"},{"line_number":441,"context_line":"                LOG.error(_(\u0027Output from Redis command: %s\u0027) % redis_info)"},{"line_number":442,"context_line":"                raise RuntimeError(\"Field %s not found (Section: \u0027%s\u0027).\" % ("},{"line_number":443,"context_line":"                    key, section))"},{"line_number":444,"context_line":"            return current_value \u003d\u003d wait_value"},{"line_number":445,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_fdfbff78","line":442,"in_reply_to":"3a50d1a3_9f2d25aa","updated":"2015-07-29 21:48:42.000000000","message":"done","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"}],"trove/guestagent/datastore/experimental/redis/system.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"2752f55bc7628b823ae6eaf11a9ab7a7eeb7023e","unresolved":false,"context_lines":[{"line_number":30,"context_line":"REDIS_CLI \u003d \u0027/usr/bin/redis-cli\u0027"},{"line_number":31,"context_line":"REDIS_BIN \u003d \u0027/usr/bin/redis-server\u0027"},{"line_number":32,"context_line":"REDIS_PACKAGE \u003d \u0027redis-server\u0027"},{"line_number":33,"context_line":"REDIS_DEFAULT_PERSISTENCE_FILENAME \u003d \u0027dump.rdb\u0027"},{"line_number":34,"context_line":"SERVICE_CANDIDATES \u003d [\u0027redis-server\u0027]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"OS \u003d get_os()"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_67e71d47","line":33,"updated":"2015-07-30 16:23:24.000000000","message":"I think, you can query this from the App via the config manager.","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"d7c0cb69d8657ee080b119f36ee0ca5f7690d97d","unresolved":false,"context_lines":[{"line_number":30,"context_line":"REDIS_CLI \u003d \u0027/usr/bin/redis-cli\u0027"},{"line_number":31,"context_line":"REDIS_BIN \u003d \u0027/usr/bin/redis-server\u0027"},{"line_number":32,"context_line":"REDIS_PACKAGE \u003d \u0027redis-server\u0027"},{"line_number":33,"context_line":"REDIS_DEFAULT_PERSISTENCE_FILENAME \u003d \u0027dump.rdb\u0027"},{"line_number":34,"context_line":"SERVICE_CANDIDATES \u003d [\u0027redis-server\u0027]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"OS \u003d get_os()"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_ac473d76","line":33,"in_reply_to":"3a50d1a3_67e71d47","updated":"2015-07-30 22:18:01.000000000","message":"Done","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"}],"trove/guestagent/strategies/backup/experimental/redis_impl.py":[{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"591df60c6530aa95f9662077e0dc011322d41822","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_8e8483b1","line":1,"updated":"2015-05-27 10:14:27.000000000","message":"s/2013/2015","commit_id":"fef1292de31fbe7d6b0c738fa66ca4d50f4e08aa"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"591df60c6530aa95f9662077e0dc011322d41822","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"from trove.guestagent.strategies.backup import base"},{"line_number":17,"context_line":"from trove.openstack.common import log as logging"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_ceb83b78","line":17,"updated":"2015-05-27 10:14:27.000000000","message":"why do you need logging when you are not using any LOG messages","commit_id":"fef1292de31fbe7d6b0c738fa66ca4d50f4e08aa"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"b1f3304c7e994eaa6f7c163243ca43d4ea4048bc","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"    @property"},{"line_number":27,"context_line":"    def cmd(self):"},{"line_number":28,"context_line":"        cmd \u003d (\u0027cat /var/lib/redis/dump.rdb\u0027)"},{"line_number":29,"context_line":"        return cmd + self.zip_cmd + self.encrypt_cmd"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_30dfe83b","line":28,"updated":"2015-05-28 18:10:28.000000000","message":"are the permissions such that this would work?","commit_id":"fef1292de31fbe7d6b0c738fa66ca4d50f4e08aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"81b0d2c7773d5b31787db29269cb8c6295bd8a70","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"PERSIST_TIMEOUT \u003d 1200"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class RedisBackup(base.BackupRunner):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_b0a9a4e1","line":22,"updated":"2015-06-16 12:16:42.000000000","message":"Can we move such critical things into configuration options?","commit_id":"149ef5ecd99e17c17027bfa8ab6397c327660780"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"bba784c04b00cd230f0262a8da6de3df7bf61bb2","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"PERSIST_TIMEOUT \u003d 1200"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class RedisBackup(base.BackupRunner):"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_2e0a0222","line":22,"in_reply_to":"fa32b979_b0a9a4e1","updated":"2015-06-16 18:30:56.000000000","message":"sure, but most of the backup/restore have hardcoded timeouts - probably best to implement that as a separate issue","commit_id":"149ef5ecd99e17c17027bfa8ab6397c327660780"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"f9b4c1ab651a96eced503cd9770ebc76501edd34","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"PERSIST_TIMEOUT \u003d 1200"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"class RedisBackup(base.BackupRunner):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_ebb28f95","line":22,"updated":"2015-06-24 12:27:43.000000000","message":"Why isn\u0027t this a config option?","commit_id":"159def181396300df0df87c75b591b90328c4646"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"f9b4c1ab651a96eced503cd9770ebc76501edd34","unresolved":false,"context_lines":[{"line_number":28,"context_line":""},{"line_number":29,"context_line":"    @property"},{"line_number":30,"context_line":"    def cmd(self):"},{"line_number":31,"context_line":"        cmd \u003d \u0027sudo cat %s\u0027 % service.build_persistence_filename()"},{"line_number":32,"context_line":"        return cmd + self.zip_cmd + self.encrypt_cmd"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":"    def _run_pre_backup(self):"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_4b693bf8","line":31,"updated":"2015-06-24 12:27:43.000000000","message":"why not do what other strategies do and stream this directly to swift?","commit_id":"159def181396300df0df87c75b591b90328c4646"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"e75a94c0f5cbf5b89919e2f5448eeb905a49d3e8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P. and 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"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a4dcd0f_a612cc07","line":1,"updated":"2015-08-11 06:00:46.000000000","message":"the separate company copyright statement should go as separate statement.","commit_id":"b97dfedbb68099c30b555a7ec90d89233a091e47"}],"trove/guestagent/strategies/restore/experimental/redis_impl.py":[{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"591df60c6530aa95f9662077e0dc011322d41822","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2013 OpenStack Foundation"},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_51462e50","line":1,"updated":"2015-05-27 10:14:27.000000000","message":"s/2013/2015","commit_id":"fef1292de31fbe7d6b0c738fa66ca4d50f4e08aa"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"591df60c6530aa95f9662077e0dc011322d41822","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from trove.common import utils"},{"line_number":21,"context_line":"import trove.guestagent.datastore.redis.service as dbaas"},{"line_number":22,"context_line":"import trove.guestagent.datastore.redis.system as redis_cfg"},{"line_number":23,"context_line":"from trove.openstack.common.gettextutils import _  # noqa"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":26,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_ae5e1f43","line":23,"updated":"2015-05-27 10:14:27.000000000","message":"why do you need this # noqa\n\nI believe some copy-paste thing, could be removed","commit_id":"fef1292de31fbe7d6b0c738fa66ca4d50f4e08aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"c0c6ae0383adddc0ec44d0a6a6722ff1d24dc131","unresolved":false,"context_lines":[{"line_number":31,"context_line":"    base_restore_cmd \u003d \u0027tee /var/lib/redis/dump.rdb\u0027"},{"line_number":32,"context_line":"    config_copy_cmd \u003d \u0027cp \u0027 + redis_cfg.REDIS_CONFIG + \u0027 \u0027\\"},{"line_number":33,"context_line":"                      + redis_cfg.REDIS_CONFIG + \u0027.tmp \u0026\u0026 \u0027 \\"},{"line_number":34,"context_line":"                      + \u0027cat \u0027 + redis_cfg.REDIS_CONFIG + \u0027.tmp | \u0027"},{"line_number":35,"context_line":"    prepare_config_cmd \u003d \u0027 sed \\\u0027s/appendonly yes/appendonly no/g\\\u0027 \u003e \u0027"},{"line_number":36,"context_line":"    post_config_cmd \u003d \u0027 sed \\\u0027s/appendonly no/appendonly yes/g\\\u0027 \u003e \u0027"},{"line_number":37,"context_line":"    rewrite_aof_cmd \u003d \u0027 redis-cli BGREWRITEAOF  \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_2e26afba","line":34,"updated":"2015-05-27 09:53:08.000000000","message":"let\u0027s use builtin mechanisms for string formatting.","commit_id":"fef1292de31fbe7d6b0c738fa66ca4d50f4e08aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"c0c6ae0383adddc0ec44d0a6a6722ff1d24dc131","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    check_rewrite_status_cmd \u003d \"redis-cli info | \" \\"},{"line_number":41,"context_line":"                               \"grep aof_rewrite_in_progress | \" \\"},{"line_number":42,"context_line":"                               \"awk -F \u0027:\u0027 \u0027{print $2}\u0027\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def pre_restore(self):"},{"line_number":45,"context_line":"        app \u003d dbaas.RedisApp(dbaas.RedisAppStatus.get())"},{"line_number":46,"context_line":"        app.stop_db()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_8e0ec330","line":43,"updated":"2015-05-27 09:53:08.000000000","message":"use of backslashes is not pythonic way, please use parentheses, for example:\n\na \u003d (\u0027dfgdf\u0027\n     \u0027dsfggfh\u0027)","commit_id":"fef1292de31fbe7d6b0c738fa66ca4d50f4e08aa"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"591df60c6530aa95f9662077e0dc011322d41822","unresolved":false,"context_lines":[{"line_number":40,"context_line":"    check_rewrite_status_cmd \u003d \"redis-cli info | \" \\"},{"line_number":41,"context_line":"                               \"grep aof_rewrite_in_progress | \" \\"},{"line_number":42,"context_line":"                               \"awk -F \u0027:\u0027 \u0027{print $2}\u0027\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def pre_restore(self):"},{"line_number":45,"context_line":"        app \u003d dbaas.RedisApp(dbaas.RedisAppStatus.get())"},{"line_number":46,"context_line":"        app.stop_db()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_ae0cdf42","line":43,"in_reply_to":"7a016987_8e0ec330","updated":"2015-05-27 10:14:27.000000000","message":"+1","commit_id":"fef1292de31fbe7d6b0c738fa66ca4d50f4e08aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"c0c6ae0383adddc0ec44d0a6a6722ff1d24dc131","unresolved":false,"context_lines":[{"line_number":42,"context_line":"                               \"awk -F \u0027:\u0027 \u0027{print $2}\u0027\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    def pre_restore(self):"},{"line_number":45,"context_line":"        app \u003d dbaas.RedisApp(dbaas.RedisAppStatus.get())"},{"line_number":46,"context_line":"        app.stop_db()"},{"line_number":47,"context_line":"        LOG.info(_(\"Cleaning out restore location: %s.\"),"},{"line_number":48,"context_line":"                self.restore_location)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_ae417f3b","line":45,"updated":"2015-05-27 09:53:08.000000000","message":"you are initializing App so many times - it does take time, memory, subsequently forcing guest to poll datastore status, please make it once and use it wherever you need it.","commit_id":"fef1292de31fbe7d6b0c738fa66ca4d50f4e08aa"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"591df60c6530aa95f9662077e0dc011322d41822","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        app.stop_db()"},{"line_number":47,"context_line":"        LOG.info(_(\"Cleaning out restore location: %s.\"),"},{"line_number":48,"context_line":"                self.restore_location)"},{"line_number":49,"context_line":"        utils.execute_with_timeout(\"chmod\", \"-R\", \"0777\","},{"line_number":50,"context_line":"                                   self.restore_location,"},{"line_number":51,"context_line":"                                   root_helper\u003d\"sudo\","},{"line_number":52,"context_line":"                                   run_as_root\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_9135c6dc","line":49,"updated":"2015-05-27 10:14:27.000000000","message":"use operating_system.chmod instead of direct execution of chmod through shell","commit_id":"fef1292de31fbe7d6b0c738fa66ca4d50f4e08aa"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"b1f3304c7e994eaa6f7c163243ca43d4ea4048bc","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        app \u003d dbaas.RedisApp(dbaas.RedisAppStatus.get())"},{"line_number":59,"context_line":"        app.start_redis()"},{"line_number":60,"context_line":"        status \u003d \u00271\u0027"},{"line_number":61,"context_line":"        while status \u003d\u003d \"1\":"},{"line_number":62,"context_line":"            time.sleep(1)"},{"line_number":63,"context_line":"            status \u003d utils.execute(self.check_loading_status_cmd,"},{"line_number":64,"context_line":"                                   shell\u003dTrue)[0].rstrip()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_70a7a0bd","line":61,"updated":"2015-05-28 18:10:28.000000000","message":"so, you could be stuck here forever?","commit_id":"fef1292de31fbe7d6b0c738fa66ca4d50f4e08aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"c0c6ae0383adddc0ec44d0a6a6722ff1d24dc131","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        while status \u003d\u003d \"1\":"},{"line_number":68,"context_line":"            time.sleep(1)"},{"line_number":69,"context_line":"            status \u003d utils.execute(self.check_rewrite_status_cmd,"},{"line_number":70,"context_line":"                                   shell\u003dTrue)[0].rstrip()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        app.stop_db()"},{"line_number":73,"context_line":"        utils.execute(self.config_copy_cmd"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_0e9e53b8","line":70,"updated":"2015-05-27 09:53:08.000000000","message":"you are re-implementing polling mechanis, please use utils.poll_until","commit_id":"fef1292de31fbe7d6b0c738fa66ca4d50f4e08aa"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"b1f3304c7e994eaa6f7c163243ca43d4ea4048bc","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        while status \u003d\u003d \"1\":"},{"line_number":68,"context_line":"            time.sleep(1)"},{"line_number":69,"context_line":"            status \u003d utils.execute(self.check_rewrite_status_cmd,"},{"line_number":70,"context_line":"                                   shell\u003dTrue)[0].rstrip()"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        app.stop_db()"},{"line_number":73,"context_line":"        utils.execute(self.config_copy_cmd"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_30ada89b","line":70,"in_reply_to":"7a016987_0e9e53b8","updated":"2015-05-28 18:10:28.000000000","message":"yup!","commit_id":"fef1292de31fbe7d6b0c738fa66ca4d50f4e08aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"c0c6ae0383adddc0ec44d0a6a6722ff1d24dc131","unresolved":false,"context_lines":[{"line_number":74,"context_line":"                      + self.post_config_cmd"},{"line_number":75,"context_line":"                      + redis_cfg.REDIS_CONFIG, shell\u003dTrue)"},{"line_number":76,"context_line":"        app \u003d dbaas.RedisApp(dbaas.RedisAppStatus.get())"},{"line_number":77,"context_line":"        app.start_redis()"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_8eaa43d1","line":77,"updated":"2015-05-27 09:53:08.000000000","message":"no exception handling, this code expects are ideal case -everything is OK, but what if not?","commit_id":"fef1292de31fbe7d6b0c738fa66ca4d50f4e08aa"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"81b0d2c7773d5b31787db29269cb8c6295bd8a70","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                        system.REDIS_CONFIG]"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def pre_restore(self):"},{"line_number":43,"context_line":"        app \u003d service.RedisApp(service.RedisAppStatus.get())"},{"line_number":44,"context_line":"        app.stop_db()"},{"line_number":45,"context_line":"        LOG.info(_(\"Cleaning out restore location: %s.\"),"},{"line_number":46,"context_line":"                 self.restore_location)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_f0d40c48","line":43,"updated":"2015-06-16 12:16:42.000000000","message":"Can be per-class attributes just as you did with things above, so no need to instantiate it twice including status definition because it does take time to figure it out.","commit_id":"149ef5ecd99e17c17027bfa8ab6397c327660780"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"bba784c04b00cd230f0262a8da6de3df7bf61bb2","unresolved":false,"context_lines":[{"line_number":40,"context_line":"                        system.REDIS_CONFIG]"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"    def pre_restore(self):"},{"line_number":43,"context_line":"        app \u003d service.RedisApp(service.RedisAppStatus.get())"},{"line_number":44,"context_line":"        app.stop_db()"},{"line_number":45,"context_line":"        LOG.info(_(\"Cleaning out restore location: %s.\"),"},{"line_number":46,"context_line":"                 self.restore_location)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_ce19167b","line":43,"in_reply_to":"fa32b979_f0d40c48","updated":"2015-06-16 18:30:56.000000000","message":"Done","commit_id":"149ef5ecd99e17c17027bfa8ab6397c327660780"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"2752f55bc7628b823ae6eaf11a9ab7a7eeb7023e","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    app \u003d service.RedisApp()"},{"line_number":33,"context_line":"    restore_location \u003d app.get_persistence_filepath()"},{"line_number":34,"context_line":"    base_restore_cmd \u003d \u0027tee %s\u0027 % restore_location"},{"line_number":35,"context_line":"    config_backup_file \u003d \u0027%s.tmp\u0027 % system.REDIS_CONFIG"},{"line_number":36,"context_line":"    aof_set \u003d app.is_appendonly_enabled()"},{"line_number":37,"context_line":"    aof_off_cmd_list \u003d [\u0027sed\u0027,"},{"line_number":38,"context_line":"                        \u0027-i\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_c7a8717a","line":35,"updated":"2015-07-30 16:23:24.000000000","message":"You should be able to use the config manager from the \u0027app\u0027 for these updates.","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"d7c0cb69d8657ee080b119f36ee0ca5f7690d97d","unresolved":false,"context_lines":[{"line_number":32,"context_line":"    app \u003d service.RedisApp()"},{"line_number":33,"context_line":"    restore_location \u003d app.get_persistence_filepath()"},{"line_number":34,"context_line":"    base_restore_cmd \u003d \u0027tee %s\u0027 % restore_location"},{"line_number":35,"context_line":"    config_backup_file \u003d \u0027%s.tmp\u0027 % system.REDIS_CONFIG"},{"line_number":36,"context_line":"    aof_set \u003d app.is_appendonly_enabled()"},{"line_number":37,"context_line":"    aof_off_cmd_list \u003d [\u0027sed\u0027,"},{"line_number":38,"context_line":"                        \u0027-i\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_6c5a9552","line":35,"in_reply_to":"3a50d1a3_c7a8717a","updated":"2015-07-30 22:18:01.000000000","message":"Hmm, not yet ;)","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"2752f55bc7628b823ae6eaf11a9ab7a7eeb7023e","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        LOG.info(_(\"Cleaning out restore location: %s.\"),"},{"line_number":45,"context_line":"                 self.restore_location)"},{"line_number":46,"context_line":"        operating_system.chmod(self.restore_location, FileMode.SET_FULL(),"},{"line_number":47,"context_line":"                               as_root\u003dTrue)"},{"line_number":48,"context_line":"        utils.clean_out(self.restore_location)"},{"line_number":49,"context_line":"        # IF AOF is set, we need to turn it off temporarily"},{"line_number":50,"context_line":"        if self.aof_set:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_07e3b906","line":47,"updated":"2015-07-30 16:23:24.000000000","message":"You can also say \"FileMode.SET_FULL\". No need for \u0027()\u0027","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"d7c0cb69d8657ee080b119f36ee0ca5f7690d97d","unresolved":false,"context_lines":[{"line_number":44,"context_line":"        LOG.info(_(\"Cleaning out restore location: %s.\"),"},{"line_number":45,"context_line":"                 self.restore_location)"},{"line_number":46,"context_line":"        operating_system.chmod(self.restore_location, FileMode.SET_FULL(),"},{"line_number":47,"context_line":"                               as_root\u003dTrue)"},{"line_number":48,"context_line":"        utils.clean_out(self.restore_location)"},{"line_number":49,"context_line":"        # IF AOF is set, we need to turn it off temporarily"},{"line_number":50,"context_line":"        if self.aof_set:"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_0c575127","line":47,"in_reply_to":"3a50d1a3_07e3b906","updated":"2015-07-30 22:18:01.000000000","message":"Done","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"e75a94c0f5cbf5b89919e2f5448eeb905a49d3e8","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright 2015 Hewlett-Packard Development Company, L.P. and 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"}],"source_content_type":"text/x-python","patch_set":21,"id":"1a4dcd0f_a6296c39","line":1,"updated":"2015-08-11 06:00:46.000000000","message":"I would be interested to see this copyright statement as two separate ones.","commit_id":"b97dfedbb68099c30b555a7ec90d89233a091e47"}],"trove/tests/api/runners/backup_runners.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"c4689f8b2b96ce1081d5bcedb6d80e5793837551","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        self.assert_equal(\u0027BACKUP\u0027, instance.status,"},{"line_number":122,"context_line":"                          \u0027Unexpected instance status\u0027)"},{"line_number":123,"context_line":"        self.assert_equal(self.instance_info.dbaas_datastore,"},{"line_number":124,"context_line":"                          result.datastore[\u0027type\u0027],"},{"line_number":125,"context_line":"                          \u0027Unexpected datastore\u0027)"},{"line_number":126,"context_line":"        self.assert_equal(self.instance_info.dbaas_datastore_version,"},{"line_number":127,"context_line":"                          result.datastore[\u0027version\u0027],"},{"line_number":128,"context_line":"                          \u0027Unexpected datastore version\u0027)"},{"line_number":129,"context_line":"        self.assert_equal(datastore_version.id, result.datastore[\u0027version_id\u0027],"},{"line_number":130,"context_line":"                          \u0027Unexpected datastore version id\u0027)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def run_restore_instance_from_not_completed_backup("},{"line_number":133,"context_line":"            self, expected_exception\u003dexceptions.Conflict,"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa1b9901_32d64fc6","line":130,"range":{"start_line":123,"start_character":8,"end_line":130,"end_character":60},"updated":"2015-08-17 20:08:57.000000000","message":"Seems a bit unrelated to the backup test.","commit_id":"9dee9f80fd4c8f2f64e456e6dca3b1caaaa11be9"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"7892edd2fc67a5f9a9c536cce11e9b2da6be5326","unresolved":false,"context_lines":[{"line_number":120,"context_line":""},{"line_number":121,"context_line":"        self.assert_equal(\u0027BACKUP\u0027, instance.status,"},{"line_number":122,"context_line":"                          \u0027Unexpected instance status\u0027)"},{"line_number":123,"context_line":"        self.assert_equal(self.instance_info.dbaas_datastore,"},{"line_number":124,"context_line":"                          result.datastore[\u0027type\u0027],"},{"line_number":125,"context_line":"                          \u0027Unexpected datastore\u0027)"},{"line_number":126,"context_line":"        self.assert_equal(self.instance_info.dbaas_datastore_version,"},{"line_number":127,"context_line":"                          result.datastore[\u0027version\u0027],"},{"line_number":128,"context_line":"                          \u0027Unexpected datastore version\u0027)"},{"line_number":129,"context_line":"        self.assert_equal(datastore_version.id, result.datastore[\u0027version_id\u0027],"},{"line_number":130,"context_line":"                          \u0027Unexpected datastore version id\u0027)"},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"    def run_restore_instance_from_not_completed_backup("},{"line_number":133,"context_line":"            self, expected_exception\u003dexceptions.Conflict,"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa1b9901_1d3337f8","line":130,"range":{"start_line":123,"start_character":8,"end_line":130,"end_character":60},"in_reply_to":"fa1b9901_32d64fc6","updated":"2015-08-21 16:01:40.000000000","message":"It\u0027s just making sure that the backup is of the right datastore/version","commit_id":"9dee9f80fd4c8f2f64e456e6dca3b1caaaa11be9"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"c4689f8b2b96ce1081d5bcedb6d80e5793837551","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    def run_backup_create_completed(self):"},{"line_number":156,"context_line":"        self._verify_backup(self.backup_info.id)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def _verify_backup(self, backup_id):"},{"line_number":159,"context_line":"        def _result_is_active():"},{"line_number":160,"context_line":"            backup \u003d self.rd_client.backups.get(backup_id)"},{"line_number":161,"context_line":"            if backup.status \u003d\u003d \u0027COMPLETED\u0027:"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa1b9901_5231830a","line":158,"updated":"2015-08-17 20:08:57.000000000","message":"May add the timing code and print the elapsed time on finish. See how the base does it for instances.","commit_id":"9dee9f80fd4c8f2f64e456e6dca3b1caaaa11be9"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"7892edd2fc67a5f9a9c536cce11e9b2da6be5326","unresolved":false,"context_lines":[{"line_number":155,"context_line":"    def run_backup_create_completed(self):"},{"line_number":156,"context_line":"        self._verify_backup(self.backup_info.id)"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"    def _verify_backup(self, backup_id):"},{"line_number":159,"context_line":"        def _result_is_active():"},{"line_number":160,"context_line":"            backup \u003d self.rd_client.backups.get(backup_id)"},{"line_number":161,"context_line":"            if backup.status \u003d\u003d \u0027COMPLETED\u0027:"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa1b9901_3d471b4d","line":158,"in_reply_to":"fa1b9901_5231830a","updated":"2015-08-21 16:01:40.000000000","message":"I\u0027ll take a look ...","commit_id":"9dee9f80fd4c8f2f64e456e6dca3b1caaaa11be9"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"c4689f8b2b96ce1081d5bcedb6d80e5793837551","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        self.rd_client.instances.delete(instance_id)"},{"line_number":294,"context_line":"        self.assert_instance_action(instance_id, expected_states,"},{"line_number":295,"context_line":"                                    expected_http_code)"},{"line_number":296,"context_line":"        self._wait_until_instance_is_gone(instance_id)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    def _wait_until_instance_is_gone(self, instance_id):"},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"fa1b9901_45ba1be3","line":296,"range":{"start_line":296,"start_character":13,"end_line":296,"end_character":41},"updated":"2015-08-17 20:08:57.000000000","message":"(-1) just use self.assert_all_gone(...)","commit_id":"9dee9f80fd4c8f2f64e456e6dca3b1caaaa11be9"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"7892edd2fc67a5f9a9c536cce11e9b2da6be5326","unresolved":false,"context_lines":[{"line_number":293,"context_line":"        self.rd_client.instances.delete(instance_id)"},{"line_number":294,"context_line":"        self.assert_instance_action(instance_id, expected_states,"},{"line_number":295,"context_line":"                                    expected_http_code)"},{"line_number":296,"context_line":"        self._wait_until_instance_is_gone(instance_id)"},{"line_number":297,"context_line":""},{"line_number":298,"context_line":"    def _wait_until_instance_is_gone(self, instance_id):"},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"fa1b9901_fd77639d","line":296,"range":{"start_line":296,"start_character":13,"end_line":296,"end_character":41},"in_reply_to":"fa1b9901_45ba1be3","updated":"2015-08-21 16:01:40.000000000","message":"done","commit_id":"9dee9f80fd4c8f2f64e456e6dca3b1caaaa11be9"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"c4689f8b2b96ce1081d5bcedb6d80e5793837551","unresolved":false,"context_lines":[{"line_number":377,"context_line":"        client \u003d self._get_redis_client(host)"},{"line_number":378,"context_line":"        # make sure the data is there - tests edge cases and a random one"},{"line_number":379,"context_line":"        self._validate_data(client, \u0027foo\u0027, \u0027bar\u0027)"},{"line_number":380,"context_line":"        random_num \u003d random.randint(1, self.LOAD_RECORD_SIZE - 2)"},{"line_number":381,"context_line":"        for num in [1,"},{"line_number":382,"context_line":"                    int(self.LOAD_RECORD_SIZE / 2),"},{"line_number":383,"context_line":"                    self.LOAD_RECORD_SIZE - 1,"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa1b9901_854913d3","line":380,"range":{"start_line":380,"start_character":36,"end_line":380,"end_character":37},"updated":"2015-08-17 20:08:57.000000000","message":"Shouldn\u0027t this be \u00272\u0027 - i.e. the first record is always tested?","commit_id":"9dee9f80fd4c8f2f64e456e6dca3b1caaaa11be9"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"7892edd2fc67a5f9a9c536cce11e9b2da6be5326","unresolved":false,"context_lines":[{"line_number":377,"context_line":"        client \u003d self._get_redis_client(host)"},{"line_number":378,"context_line":"        # make sure the data is there - tests edge cases and a random one"},{"line_number":379,"context_line":"        self._validate_data(client, \u0027foo\u0027, \u0027bar\u0027)"},{"line_number":380,"context_line":"        random_num \u003d random.randint(1, self.LOAD_RECORD_SIZE - 2)"},{"line_number":381,"context_line":"        for num in [1,"},{"line_number":382,"context_line":"                    int(self.LOAD_RECORD_SIZE / 2),"},{"line_number":383,"context_line":"                    self.LOAD_RECORD_SIZE - 1,"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa1b9901_bd71ebaa","line":380,"range":{"start_line":380,"start_character":36,"end_line":380,"end_character":37},"in_reply_to":"fa1b9901_854913d3","updated":"2015-08-21 16:01:40.000000000","message":"Done (actually, refactored into a helper class and fixed there)","commit_id":"9dee9f80fd4c8f2f64e456e6dca3b1caaaa11be9"}],"trove/tests/api/runners/base_test_runners.py":[{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"c4689f8b2b96ce1081d5bcedb6d80e5793837551","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        return True"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def assert_unprocessable(self, func, *args, **kwargs):"},{"line_number":134,"context_line":"        try:"},{"line_number":135,"context_line":"            func(*args, **kwargs)"},{"line_number":136,"context_line":"            # If the exception didn\u0027t get raised, but the instance is still in"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa1b9901_48ff9201","line":133,"updated":"2015-08-17 20:08:57.000000000","message":"Why don\u0027t we just use assert_raises for this?","commit_id":"9dee9f80fd4c8f2f64e456e6dca3b1caaaa11be9"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"7892edd2fc67a5f9a9c536cce11e9b2da6be5326","unresolved":false,"context_lines":[{"line_number":130,"context_line":""},{"line_number":131,"context_line":"        return True"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"    def assert_unprocessable(self, func, *args, **kwargs):"},{"line_number":134,"context_line":"        try:"},{"line_number":135,"context_line":"            func(*args, **kwargs)"},{"line_number":136,"context_line":"            # If the exception didn\u0027t get raised, but the instance is still in"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa1b9901_7d9273a1","line":133,"in_reply_to":"fa1b9901_48ff9201","updated":"2015-08-21 16:01:40.000000000","message":"Hmm, this handles the case where the state changes before the negative tests complete.  Maybe that\u0027s not important?","commit_id":"9dee9f80fd4c8f2f64e456e6dca3b1caaaa11be9"}],"trove/tests/int_tests.py":[{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"81b0d2c7773d5b31787db29269cb8c6295bd8a70","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                   depends_on_groups\u003ddatastore_group)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"# Backup groups for int-tests"},{"line_number":98,"context_line":"backup_group \u003d list(datastore_group)"},{"line_number":99,"context_line":"backup_group.extend([backups.GROUP])"},{"line_number":100,"context_line":"proboscis.register(groups\u003d[\"redis\"],"},{"line_number":101,"context_line":"                   depends_on_groups\u003dbackup_group)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_b0b444d1","line":98,"updated":"2015-06-16 12:16:42.000000000","message":"you just need to call method called \u0027copy\u0027 or \u0027copy_of\u0027, no need to create a list from a list.","commit_id":"149ef5ecd99e17c17027bfa8ab6397c327660780"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"bba784c04b00cd230f0262a8da6de3df7bf61bb2","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                   depends_on_groups\u003ddatastore_group)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"# Backup groups for int-tests"},{"line_number":98,"context_line":"backup_group \u003d list(datastore_group)"},{"line_number":99,"context_line":"backup_group.extend([backups.GROUP])"},{"line_number":100,"context_line":"proboscis.register(groups\u003d[\"redis\"],"},{"line_number":101,"context_line":"                   depends_on_groups\u003dbackup_group)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_6e4eca70","line":98,"in_reply_to":"fa32b979_b0b444d1","updated":"2015-06-16 18:30:56.000000000","message":"From what I read, they do the same thing, just that list() is a bit faster","commit_id":"149ef5ecd99e17c17027bfa8ab6397c327660780"},{"author":{"_account_id":8415,"name":"Denis M.","email":"lildee1991@gmail.com","username":"dmakogon"},"change_message_id":"81b0d2c7773d5b31787db29269cb8c6295bd8a70","unresolved":false,"context_lines":[{"line_number":98,"context_line":"backup_group \u003d list(datastore_group)"},{"line_number":99,"context_line":"backup_group.extend([backups.GROUP])"},{"line_number":100,"context_line":"proboscis.register(groups\u003d[\"redis\"],"},{"line_number":101,"context_line":"                   depends_on_groups\u003dbackup_group)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_f0be4cd3","line":101,"updated":"2015-06-16 12:16:42.000000000","message":"Does it work? IIRC this is something that may not work, because for now backup tests are including incremental backup tests as well inside dbaas.api.backups group.","commit_id":"149ef5ecd99e17c17027bfa8ab6397c327660780"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"bba784c04b00cd230f0262a8da6de3df7bf61bb2","unresolved":false,"context_lines":[{"line_number":98,"context_line":"backup_group \u003d list(datastore_group)"},{"line_number":99,"context_line":"backup_group.extend([backups.GROUP])"},{"line_number":100,"context_line":"proboscis.register(groups\u003d[\"redis\"],"},{"line_number":101,"context_line":"                   depends_on_groups\u003dbackup_group)"}],"source_content_type":"text/x-python","patch_set":6,"id":"fa32b979_0ec13e80","line":101,"in_reply_to":"fa32b979_f0be4cd3","updated":"2015-06-16 18:30:56.000000000","message":"You\u0027re right, the tests don\u0027t run to completion.  That\u0027s because the backup tests create a database as part of the validation, so any datastore that doesn\u0027t support database creation (like Redis) won\u0027t pass.  That\u0027s a failing of the int-tests though, and I figured out-of-scope for this patchset.  I did want to add backups to the Redis group though, to draw attention to that fact (and hopefully - eventually - get it fixed).","commit_id":"149ef5ecd99e17c17027bfa8ab6397c327660780"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"f9b4c1ab651a96eced503cd9770ebc76501edd34","unresolved":false,"context_lines":[{"line_number":94,"context_line":"proboscis.register(groups\u003d[\"cassandra\", \"couchbase\", \"mongodb\", \"postgresql\"],"},{"line_number":95,"context_line":"                   depends_on_groups\u003ddatastore_group)"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"# Backup groups for int-tests"},{"line_number":98,"context_line":"backup_group \u003d list(datastore_group)"},{"line_number":99,"context_line":"backup_group.extend([backups.GROUP])"},{"line_number":100,"context_line":"proboscis.register(groups\u003d[\"redis\"],"}],"source_content_type":"text/x-python","patch_set":7,"id":"fa32b979_4b37fbfe","line":97,"updated":"2015-06-24 12:27:43.000000000","message":"why this change?","commit_id":"159def181396300df0df87c75b591b90328c4646"}],"trove/tests/scenario/runners/backup_runners.py":[{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"e932f23af12a377df517b3de5463d50c165b4311","unresolved":false,"context_lines":[{"line_number":90,"context_line":"    def assert_backup_create(self):"},{"line_number":91,"context_line":"        # Necessary to test that the count increases."},{"line_number":92,"context_line":"        self.backup_count_prior_to_create \u003d len("},{"line_number":93,"context_line":"            self.auth_client.backups.list())"},{"line_number":94,"context_line":"        self.backup_count_for_instance_prior_to_create \u003d len("},{"line_number":95,"context_line":"            self.auth_client.instances.backups(self.instance_info.id))"},{"line_number":96,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_b63b4138","line":93,"updated":"2015-09-01 17:43:50.000000000","message":"this variable being set here causes the run_backup_list test to fail because it tried to add 1 to this value.","commit_id":"662eecef8dad8ecea8155ad085dcf3dfba3863f7"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"e28f05dd3b9ee63de8c66ee424aca20c69604f97","unresolved":false,"context_lines":[{"line_number":94,"context_line":"        self.backup_count_for_instance_prior_to_create \u003d len("},{"line_number":95,"context_line":"            self.auth_client.instances.backups(self.instance_info.id))"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"        result \u003d self.auth_client.backups.create("},{"line_number":98,"context_line":"            self.BACKUP_NAME, self.instance_info.id, self.BACKUP_DESC)"},{"line_number":99,"context_line":"        self.backup_info \u003d result"},{"line_number":100,"context_line":"        self.assert_equal(self.BACKUP_NAME, result.name,"},{"line_number":101,"context_line":"                          \u0027Unexpected backup name\u0027)"}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_041f455c","line":98,"range":{"start_line":97,"start_character":8,"end_line":98,"end_character":69},"updated":"2015-09-01 23:04:05.000000000","message":"Hmmm, here is where it creates the backup ...","commit_id":"662eecef8dad8ecea8155ad085dcf3dfba3863f7"},{"author":{"_account_id":4240,"name":"Craig Vyvial","email":"cp16net@gmail.com","username":"cp16net"},"change_message_id":"e932f23af12a377df517b3de5463d50c165b4311","unresolved":false,"context_lines":[{"line_number":171,"context_line":"    def run_backup_list(self):"},{"line_number":172,"context_line":"        backup_list \u003d self.auth_client.backups.list()"},{"line_number":173,"context_line":"        self.assert_backup_list(backup_list,"},{"line_number":174,"context_line":"                                self.backup_count_prior_to_create + 1)"},{"line_number":175,"context_line":""},{"line_number":176,"context_line":"    def assert_backup_list(self, backup_list, expected_count):"},{"line_number":177,"context_line":"        self.assert_equal(expected_count, len(backup_list),"}],"source_content_type":"text/x-python","patch_set":25,"id":"da20952f_1678edf7","line":174,"range":{"start_line":174,"start_character":31,"end_line":174,"end_character":69},"updated":"2015-09-01 17:43:50.000000000","message":"this fails because it is set after the backup is created. \n\nAssertionError: Unexpected number of backups found: \u00271\u0027 (expected \u00272\u0027).","commit_id":"662eecef8dad8ecea8155ad085dcf3dfba3863f7"}],"trove/tests/unittests/backup/test_backupagent.py":[{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"a701c92e0bc528fa75e83b7d32a87385a037d117","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        self.assertIn(\u0027gz.enc\u0027, mongodump.manifest)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    @patch.object(utils, \u0027execute_with_timeout\u0027)"},{"line_number":254,"context_line":"    @patch.object(redis_svc, \u0027load_redis_options\u0027)"},{"line_number":255,"context_line":"    def test_backup_impl_RedisBackup(self, *mocks):"},{"line_number":256,"context_line":"        netutils.get_my_ipv4 \u003d Mock(return_value\u003d\"1.1.1.1\")"},{"line_number":257,"context_line":"        redis_backup \u003d redis_impl.RedisBackup(\u0027redisbackup\u0027, extra_opts\u003d\u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_6a8df92f","line":254,"updated":"2015-07-29 08:04:24.000000000","message":"this is an unknown method load_redis_options","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"604015e37e8aba6e361d1e4cb708fe672470394f","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        self.assertIn(\u0027gz.enc\u0027, mongodump.manifest)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"    @patch.object(utils, \u0027execute_with_timeout\u0027)"},{"line_number":254,"context_line":"    @patch.object(redis_svc, \u0027load_redis_options\u0027)"},{"line_number":255,"context_line":"    def test_backup_impl_RedisBackup(self, *mocks):"},{"line_number":256,"context_line":"        netutils.get_my_ipv4 \u003d Mock(return_value\u003d\"1.1.1.1\")"},{"line_number":257,"context_line":"        redis_backup \u003d redis_impl.RedisBackup(\u0027redisbackup\u0027, extra_opts\u003d\u0027\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_233cde91","line":254,"in_reply_to":"3a50d1a3_6a8df92f","updated":"2015-07-29 21:48:42.000000000","message":"I\u0027m only half done the refactor - I should have WF -1","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"}],"trove/tests/unittests/guestagent/test_backups.py":[{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"591df60c6530aa95f9662077e0dc011322d41822","unresolved":false,"context_lines":[{"line_number":400,"context_line":"                          self.restore_runner.restore)"},{"line_number":401,"context_line":""},{"line_number":402,"context_line":""},{"line_number":403,"context_line":"class RedisBackupTests(testtools.TestCase):"},{"line_number":404,"context_line":"    def setUp(self):"},{"line_number":405,"context_line":"        super(RedisBackupTests, self).setUp()"},{"line_number":406,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_2e2c6f49","line":403,"updated":"2015-05-27 10:14:27.000000000","message":"Please use trove_testtools","commit_id":"fef1292de31fbe7d6b0c738fa66ca4d50f4e08aa"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"a701c92e0bc528fa75e83b7d32a87385a037d117","unresolved":false,"context_lines":[{"line_number":373,"context_line":"                         DECRYPT + PIPE + UNZIP + PIPE + MONGODUMP_RESTORE)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    @patch.object(utils, \u0027execute_with_timeout\u0027)"},{"line_number":376,"context_line":"    @patch.object(redis_svc, \u0027load_redis_options\u0027)"},{"line_number":377,"context_line":"    def test_backup_encrypted_redisbackup_command(self, *mocks):"},{"line_number":378,"context_line":"        backupBase.BackupRunner.is_encrypted \u003d True"},{"line_number":379,"context_line":"        backupBase.BackupRunner.encrypt_key \u003d CRYPTO_KEY"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_8a740536","line":376,"updated":"2015-07-29 08:04:24.000000000","message":"unknown method load_redis_options","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"604015e37e8aba6e361d1e4cb708fe672470394f","unresolved":false,"context_lines":[{"line_number":373,"context_line":"                         DECRYPT + PIPE + UNZIP + PIPE + MONGODUMP_RESTORE)"},{"line_number":374,"context_line":""},{"line_number":375,"context_line":"    @patch.object(utils, \u0027execute_with_timeout\u0027)"},{"line_number":376,"context_line":"    @patch.object(redis_svc, \u0027load_redis_options\u0027)"},{"line_number":377,"context_line":"    def test_backup_encrypted_redisbackup_command(self, *mocks):"},{"line_number":378,"context_line":"        backupBase.BackupRunner.is_encrypted \u003d True"},{"line_number":379,"context_line":"        backupBase.BackupRunner.encrypt_key \u003d CRYPTO_KEY"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_af968f3b","line":376,"in_reply_to":"3a50d1a3_8a740536","updated":"2015-07-29 21:48:42.000000000","message":"result of incomplete refactoring","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"a701c92e0bc528fa75e83b7d32a87385a037d117","unresolved":false,"context_lines":[{"line_number":385,"context_line":"        self.assertIn(\"gz.enc\", bkp.manifest)"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    @patch.object(utils, \u0027execute_with_timeout\u0027)"},{"line_number":388,"context_line":"    @patch.object(redis_svc, \u0027load_redis_options\u0027)"},{"line_number":389,"context_line":"    def test_backup_not_encrypted_redisbackup_command(self, *mocks):"},{"line_number":390,"context_line":"        backupBase.BackupRunner.is_encrypted \u003d False"},{"line_number":391,"context_line":"        backupBase.BackupRunner.encrypt_key \u003d CRYPTO_KEY"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_aa6f815e","line":388,"updated":"2015-07-29 08:04:24.000000000","message":"unknown method load_redis_options","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"a701c92e0bc528fa75e83b7d32a87385a037d117","unresolved":false,"context_lines":[{"line_number":395,"context_line":"        self.assertEqual(REDISBACKUP_CMD + PIPE + ZIP, bkp.command)"},{"line_number":396,"context_line":"        self.assertIn(\"gz\", bkp.manifest)"},{"line_number":397,"context_line":""},{"line_number":398,"context_line":"    @patch.object(redis_svc, \u0027load_redis_options\u0027)"},{"line_number":399,"context_line":"    def test_restore_decrypted_redisbackup_command(self, *mocks):"},{"line_number":400,"context_line":"        restoreBase.RestoreRunner.is_zipped \u003d True"},{"line_number":401,"context_line":"        restoreBase.RestoreRunner.is_encrypted \u003d False"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_6a941936","line":398,"updated":"2015-07-29 08:04:24.000000000","message":"unknown method load_redis_options","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"a701c92e0bc528fa75e83b7d32a87385a037d117","unresolved":false,"context_lines":[{"line_number":404,"context_line":"                            location\u003d\"filename\", checksum\u003d\"md5\")"},{"line_number":405,"context_line":"        self.assertEqual(restr.restore_cmd, UNZIP + PIPE + REDISBACKUP_RESTORE)"},{"line_number":406,"context_line":""},{"line_number":407,"context_line":"    @patch.object(redis_svc, \u0027load_redis_options\u0027)"},{"line_number":408,"context_line":"    def test_restore_encrypted_redisbackup_command(self, *mocks):"},{"line_number":409,"context_line":"        restoreBase.RestoreRunner.is_zipped \u003d True"},{"line_number":410,"context_line":"        restoreBase.RestoreRunner.is_encrypted \u003d True"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_0a97953a","line":407,"updated":"2015-07-29 08:04:24.000000000","message":"unknown method load_redis_options","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"a701c92e0bc528fa75e83b7d32a87385a037d117","unresolved":false,"context_lines":[{"line_number":583,"context_line":"        self.exec_timeout_patch.start()"},{"line_number":584,"context_line":"        self.addCleanup(self.exec_timeout_patch.stop)"},{"line_number":585,"context_line":"        self.load_redis_opt_patch \u003d patch.object("},{"line_number":586,"context_line":"            redis_svc, \u0027load_redis_options\u0027)"},{"line_number":587,"context_line":"        self.load_redis_opt_patch.start()"},{"line_number":588,"context_line":"        self.addCleanup(self.load_redis_opt_patch.stop)"},{"line_number":589,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_0aaeb580","line":586,"updated":"2015-07-29 08:04:24.000000000","message":"unknown method load_redis_options","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"a701c92e0bc528fa75e83b7d32a87385a037d117","unresolved":false,"context_lines":[{"line_number":651,"context_line":"    def test_restore_failed_due_to_pre_restore(self):"},{"line_number":652,"context_line":"        self.restore_runner_mocks[\u0027pre_restore\u0027].side_effect \u003d ("},{"line_number":653,"context_line":"            exception.ProcessExecutionError(\u0027Error\u0027))"},{"line_number":654,"context_line":"        self.assertRaises(exception.ProcessExecutionError,"},{"line_number":655,"context_line":"                          self.restore_runner.restore)"},{"line_number":656,"context_line":""},{"line_number":657,"context_line":"    def test_restore_failed_due_to_run_restore(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_6a097994","line":654,"updated":"2015-07-29 08:04:24.000000000","message":"Can we use assertRaisesRegexp","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"a701c92e0bc528fa75e83b7d32a87385a037d117","unresolved":false,"context_lines":[{"line_number":657,"context_line":"    def test_restore_failed_due_to_run_restore(self):"},{"line_number":658,"context_line":"        self.restore_runner._run_restore.side_effect \u003d ("},{"line_number":659,"context_line":"            exception.ProcessExecutionError(\u0027Error\u0027))"},{"line_number":660,"context_line":"        self.assertRaises(exception.ProcessExecutionError,"},{"line_number":661,"context_line":"                          self.restore_runner.restore)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_eaf58982","line":660,"updated":"2015-07-29 08:04:24.000000000","message":"Can we use assertRaisesRegexp","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"}],"trove/tests/unittests/guestagent/test_redis_manager.py":[{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"591df60c6530aa95f9662077e0dc011322d41822","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            do_not_start_on_reboot\u003dFalse)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    def test_create_backup(self):"},{"line_number":130,"context_line":"        backup.backup \u003d MagicMock(return_value\u003dNone)"},{"line_number":131,"context_line":"        # entry point"},{"line_number":132,"context_line":"        RedisManager().create_backup(self.context, \u0027backup_id_123\u0027)"},{"line_number":133,"context_line":"        # assertions"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a016987_31e9721b","line":130,"updated":"2015-05-27 10:14:27.000000000","message":"this is unsafe mocking, there are no unmocks to this mocked entry","commit_id":"fef1292de31fbe7d6b0c738fa66ca4d50f4e08aa"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"a701c92e0bc528fa75e83b7d32a87385a037d117","unresolved":false,"context_lines":[{"line_number":74,"context_line":"    @patch.object(redis_service, \u0027get_persistence_dir\u0027,"},{"line_number":75,"context_line":"                  MagicMock(return_value\u003d\u0027/var/lib/redis\u0027))"},{"line_number":76,"context_line":"    def test_prepare_redis_from_backup(self):"},{"line_number":77,"context_line":"        self._prepare_dynamic(backup_id\u003d\u0027backup_id_123abc\u0027)"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"    @patch.multiple(redis_service.RedisApp,"},{"line_number":80,"context_line":"                    apply_initial_guestagent_configuration\u003dDEFAULT)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_7fe299d6","line":77,"updated":"2015-07-29 08:04:24.000000000","message":"backup_id is not defined in arguments","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"a701c92e0bc528fa75e83b7d32a87385a037d117","unresolved":false,"context_lines":[{"line_number":86,"context_line":"                         mount_point\u003d\u0027var/lib/redis\u0027):"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"        backup_info \u003d None"},{"line_number":89,"context_line":"        if backup_id is not None:"},{"line_number":90,"context_line":"            backup_info \u003d {\u0027id\u0027: backup_id,"},{"line_number":91,"context_line":"                           \u0027location\u0027: \u0027fake-location\u0027,"},{"line_number":92,"context_line":"                           \u0027type\u0027: \u0027RedisBackup\u0027,"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_bfdee1d7","line":89,"updated":"2015-07-29 08:04:24.000000000","message":"there is no definition for this backup_id","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":7806,"name":"Sushil Kumar","email":"skm.net@gmail.com","username":"sushilkm"},"change_message_id":"a701c92e0bc528fa75e83b7d32a87385a037d117","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    @patch.object(backup, \u0027backup\u0027)"},{"line_number":149,"context_line":"    def test_create_backup(self, backup_mock):"},{"line_number":150,"context_line":"        backup.backup \u003d MagicMock(return_value\u003dNone)"},{"line_number":151,"context_line":"        RedisManager().create_backup(self.context, \u0027backup_id_123\u0027)"},{"line_number":152,"context_line":"        backup.backup.assert_any_call(self.context, \u0027backup_id_123\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_dfb2cd93","line":150,"updated":"2015-07-29 08:04:24.000000000","message":"a) when u are already patching backup.backup as backup_mock then why is this needed.\n\nb) also this backup.backup looks unsafe mocking.","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"604015e37e8aba6e361d1e4cb708fe672470394f","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"    @patch.object(backup, \u0027backup\u0027)"},{"line_number":149,"context_line":"    def test_create_backup(self, backup_mock):"},{"line_number":150,"context_line":"        backup.backup \u003d MagicMock(return_value\u003dNone)"},{"line_number":151,"context_line":"        RedisManager().create_backup(self.context, \u0027backup_id_123\u0027)"},{"line_number":152,"context_line":"        backup.backup.assert_any_call(self.context, \u0027backup_id_123\u0027)"}],"source_content_type":"text/x-python","patch_set":8,"id":"3a50d1a3_ae41b564","line":150,"in_reply_to":"3a50d1a3_dfb2cd93","updated":"2015-07-29 21:48:42.000000000","message":"This wasn\u0027t removed after the copy-paste.  Done.","commit_id":"5f5a7277d75274911ea78251dc8efb274ba58f05"}]}
