)]}'
{"trove/guestagent/datastore/experimental/db2/manager.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"c0b1f043a7db8f78e9f2a21badae0e6f438a9c49","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            LOG.debug(\u0027Mounted the volume.\u0027)"},{"line_number":56,"context_line":"        self.app.update_hostname()"},{"line_number":57,"context_line":"        self.app.change_ownership(mount_point)"},{"line_number":58,"context_line":"        self.app.create_backup_dirs()"},{"line_number":59,"context_line":"        self.app.start_db()"},{"line_number":60,"context_line":"        if backup_info:"},{"line_number":61,"context_line":"            self._perform_restore(backup_info, context, mount_point)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_f248ad5e","line":58,"range":{"start_line":58,"start_character":3,"end_line":58,"end_character":37},"updated":"2016-09-01 19:44:10.000000000","message":"why do this here? looks like you will delete after a backup and therefore have to create before a backup as well? no?","commit_id":"dc5f88198016e26251a456eca6afcf11a77e8b9e"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"a512ac202f983389215b463ecadc665bea3bdb08","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            LOG.debug(\u0027Mounted the volume.\u0027)"},{"line_number":56,"context_line":"        self.app.update_hostname()"},{"line_number":57,"context_line":"        self.app.change_ownership(mount_point)"},{"line_number":58,"context_line":"        self.app.create_backup_dirs()"},{"line_number":59,"context_line":"        self.app.start_db()"},{"line_number":60,"context_line":"        if backup_info:"},{"line_number":61,"context_line":"            self._perform_restore(backup_info, context, mount_point)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_b873687f","line":58,"range":{"start_line":58,"start_character":3,"end_line":58,"end_character":37},"in_reply_to":"9a89bdaa_730d8d36","updated":"2016-09-12 16:08:59.000000000","message":"Just wondering. That initial full backup is not needed - i.e. we can afford to send it to /dev/null? It seems like DB2 requires it and hence forces you to make one. Why else would they do that...? Just wondering... :/","commit_id":"dc5f88198016e26251a456eca6afcf11a77e8b9e"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"87a8ee57c224335a423bb38114c5fed152d1a0c8","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            LOG.debug(\u0027Mounted the volume.\u0027)"},{"line_number":56,"context_line":"        self.app.update_hostname()"},{"line_number":57,"context_line":"        self.app.change_ownership(mount_point)"},{"line_number":58,"context_line":"        self.app.create_backup_dirs()"},{"line_number":59,"context_line":"        self.app.start_db()"},{"line_number":60,"context_line":"        if backup_info:"},{"line_number":61,"context_line":"            self._perform_restore(backup_info, context, mount_point)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_c4df6238","line":58,"range":{"start_line":58,"start_character":3,"end_line":58,"end_character":37},"in_reply_to":"9a89bdaa_b873687f","updated":"2016-09-12 19:21:29.000000000","message":"Thats right Petr. The first full backup is not needed which is why we can addord to send it to /dev/null. It is required to do a full offline backup as soon as we configure a database to enable archive logging since the database is put in a BACKUP PENDING mode and it is the recommended way to get it back to the active state.","commit_id":"dc5f88198016e26251a456eca6afcf11a77e8b9e"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"596a892cda1759a4d3dc007704c0f6bedddea9e5","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            LOG.debug(\u0027Mounted the volume.\u0027)"},{"line_number":56,"context_line":"        self.app.update_hostname()"},{"line_number":57,"context_line":"        self.app.change_ownership(mount_point)"},{"line_number":58,"context_line":"        self.app.create_backup_dirs()"},{"line_number":59,"context_line":"        self.app.start_db()"},{"line_number":60,"context_line":"        if backup_info:"},{"line_number":61,"context_line":"            self._perform_restore(backup_info, context, mount_point)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_730d8d36","line":58,"range":{"start_line":58,"start_character":3,"end_line":58,"end_character":37},"in_reply_to":"fa7ab95a_f248ad5e","updated":"2016-09-06 21:09:37.000000000","message":"Amrith, so I made some code changes and things have changed a bit but the reason for creating the backup directory and archive log directory here is because when a user wants to do online backups, each database needs to be configured for it. In service.py, this is done in the create_database function. To configure this, we have to specify the directory where the archived logs can be stored. Once this configuration is set for each database, it goes into a \u0027BACKUP PENDING\u0027 state, and is not accessible. To bring it back to a normal state, we need to do an offline backup. In the latest patchset, the change I made is that I only create the archived log directory and specify /dev/null device for the full offline backup (This backup is simply to change the database state from BACKUP PENDING to normal). The backup directory where the backups will be stored is created in the db2_impl.py class as it used to be.","commit_id":"dc5f88198016e26251a456eca6afcf11a77e8b9e"}],"trove/guestagent/strategies/backup/experimental/db2_impl.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"c0b1f043a7db8f78e9f2a21badae0e6f438a9c49","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            avail \u003d operating_system.get_bytes_free_on_fs(DB2_DBPATH)"},{"line_number":83,"context_line":"            if est_backup_size \u003e avail:"},{"line_number":84,"context_line":"                self.cleanup()"},{"line_number":85,"context_line":"                raise OSError(_(\"Need more free space to backup db2 database,\""},{"line_number":86,"context_line":"                                \" estimated %(est_dump_size)s\""},{"line_number":87,"context_line":"                                \" and found %(avail)s bytes free \") %"},{"line_number":88,"context_line":"                              {\u0027est_dump_size\u0027: est_dump_size,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_72f01dfe","line":85,"range":{"start_line":85,"start_character":22,"end_line":85,"end_character":29},"updated":"2016-09-01 19:44:10.000000000","message":"shouldn\u0027t we define something other than OSError? For example, mirroring InsufficientSpaceForReplica","commit_id":"dc5f88198016e26251a456eca6afcf11a77e8b9e"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"596a892cda1759a4d3dc007704c0f6bedddea9e5","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            avail \u003d operating_system.get_bytes_free_on_fs(DB2_DBPATH)"},{"line_number":83,"context_line":"            if est_backup_size \u003e avail:"},{"line_number":84,"context_line":"                self.cleanup()"},{"line_number":85,"context_line":"                raise OSError(_(\"Need more free space to backup db2 database,\""},{"line_number":86,"context_line":"                                \" estimated %(est_dump_size)s\""},{"line_number":87,"context_line":"                                \" and found %(avail)s bytes free \") %"},{"line_number":88,"context_line":"                              {\u0027est_dump_size\u0027: est_dump_size,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_d363b9da","line":85,"range":{"start_line":85,"start_character":22,"end_line":85,"end_character":29},"in_reply_to":"fa7ab95a_72f01dfe","updated":"2016-09-06 21:09:37.000000000","message":"I created a class called InsufficientSpaceForBackup to mirror this. Thanks Amrith","commit_id":"dc5f88198016e26251a456eca6afcf11a77e8b9e"},{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"c0b1f043a7db8f78e9f2a21badae0e6f438a9c49","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                               \u0027avail\u0027: avail})"},{"line_number":90,"context_line":"            dbNames \u003d self.list_dbnames()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"            if not operating_system.exists(system.DB2_BACKUP_DIR, True):"},{"line_number":93,"context_line":"                operating_system.create_directory(system.DB2_BACKUP_DIR,"},{"line_number":94,"context_line":"                                                  system.DB2_INSTANCE_OWNER,"},{"line_number":95,"context_line":"                                                  system.DB2_INSTANCE_OWNER,"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_2f19ce88","line":92,"range":{"start_line":92,"start_character":1,"end_line":92,"end_character":72},"updated":"2016-09-01 19:44:10.000000000","message":"This code appears to duplicate create_backup_dirs()","commit_id":"dc5f88198016e26251a456eca6afcf11a77e8b9e"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"596a892cda1759a4d3dc007704c0f6bedddea9e5","unresolved":false,"context_lines":[{"line_number":89,"context_line":"                               \u0027avail\u0027: avail})"},{"line_number":90,"context_line":"            dbNames \u003d self.list_dbnames()"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"            if not operating_system.exists(system.DB2_BACKUP_DIR, True):"},{"line_number":93,"context_line":"                operating_system.create_directory(system.DB2_BACKUP_DIR,"},{"line_number":94,"context_line":"                                                  system.DB2_INSTANCE_OWNER,"},{"line_number":95,"context_line":"                                                  system.DB2_INSTANCE_OWNER,"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_d3c5793c","line":92,"range":{"start_line":92,"start_character":1,"end_line":92,"end_character":72},"in_reply_to":"fa7ab95a_2f19ce88","updated":"2016-09-06 21:09:37.000000000","message":"This should be fixed in the latest patch set. So the backup directory (where the backups are stored) gets created here in the execute_backup_cmd right before the backup command is run. The archived log directory is created when the DB2Service is initialized so that the archived logs can be stored.","commit_id":"dc5f88198016e26251a456eca6afcf11a77e8b9e"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"758a6d36b0c3c2f7ad37d2248a1888da7ae76e6b","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.admin \u003d service.DB2Admin()"},{"line_number":122,"context_line":"        super(DB2Backup, self).__init__(*args, **kwargs)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _run_pre_backup(self):"},{"line_number":125,"context_line":"        \"\"\"Create archival contents in dump dir\"\"\""},{"line_number":126,"context_line":"        try:"},{"line_number":127,"context_line":"            est_backup_size \u003d self.estimate_backup_size()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_18329d10","line":124,"updated":"2016-09-01 18:25:13.000000000","message":"This is almost identical to the Online version.\n\nIf you move line 136 to 143 (i.e. after creating dir) you can encapsulate the difference (143-148) in a method called by \u0027_run_pre_backup\u0027. That way you should be able to move \u0027_run_pre_backup\u0027 to the base class and just override the method containing the difference.","commit_id":"dc5f88198016e26251a456eca6afcf11a77e8b9e"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"596a892cda1759a4d3dc007704c0f6bedddea9e5","unresolved":false,"context_lines":[{"line_number":121,"context_line":"        self.admin \u003d service.DB2Admin()"},{"line_number":122,"context_line":"        super(DB2Backup, self).__init__(*args, **kwargs)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"    def _run_pre_backup(self):"},{"line_number":125,"context_line":"        \"\"\"Create archival contents in dump dir\"\"\""},{"line_number":126,"context_line":"        try:"},{"line_number":127,"context_line":"            est_backup_size \u003d self.estimate_backup_size()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_93f93183","line":124,"in_reply_to":"fa7ab95a_18329d10","updated":"2016-09-06 21:09:37.000000000","message":"Thanks Petr. Made a bunch of changes to move all the common code up to the base.","commit_id":"dc5f88198016e26251a456eca6afcf11a77e8b9e"},{"author":{"_account_id":14576,"name":"Petr Malik","email":"pmalik@tesora.com","username":"pmalik"},"change_message_id":"758a6d36b0c3c2f7ad37d2248a1888da7ae76e6b","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            self.cleanup()"},{"line_number":152,"context_line":"            raise"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def cleanup(self):"},{"line_number":155,"context_line":"        operating_system.remove(system.DB2_BACKUP_DIR,"},{"line_number":156,"context_line":"                                force\u003dTrue,"},{"line_number":157,"context_line":"                                as_root\u003dTrue)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _run_post_backup(self):"},{"line_number":160,"context_line":"        self.cleanup()"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_b8ae112c","line":160,"range":{"start_line":154,"start_character":4,"end_line":160,"end_character":22},"updated":"2016-09-01 18:25:13.000000000","message":"Similarly this could be in the base.\n\nThe Online implementation would then just have:\n\ndef cleanup(self):\n    super(DB2Backup, self).cleanup()\n    operating_system.remove(system.DB2_ARCHIVE_LOGS_DIR,\n                            force\u003dTrue, as_root\u003dTrue)","commit_id":"dc5f88198016e26251a456eca6afcf11a77e8b9e"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"596a892cda1759a4d3dc007704c0f6bedddea9e5","unresolved":false,"context_lines":[{"line_number":151,"context_line":"            self.cleanup()"},{"line_number":152,"context_line":"            raise"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def cleanup(self):"},{"line_number":155,"context_line":"        operating_system.remove(system.DB2_BACKUP_DIR,"},{"line_number":156,"context_line":"                                force\u003dTrue,"},{"line_number":157,"context_line":"                                as_root\u003dTrue)"},{"line_number":158,"context_line":""},{"line_number":159,"context_line":"    def _run_post_backup(self):"},{"line_number":160,"context_line":"        self.cleanup()"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_332f85f7","line":160,"range":{"start_line":154,"start_character":4,"end_line":160,"end_character":22},"in_reply_to":"fa7ab95a_b8ae112c","updated":"2016-09-06 21:09:37.000000000","message":"Done","commit_id":"dc5f88198016e26251a456eca6afcf11a77e8b9e"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"04cf6684d2057e60767566b8bb2c3d1da8fe9c74","unresolved":false,"context_lines":[{"line_number":55,"context_line":"            for dbname in self.databases:"},{"line_number":56,"context_line":"                out \u003d service.run_command(system.GET_DB_SIZE % {\u0027dbname\u0027:"},{"line_number":57,"context_line":"                                                                dbname})"},{"line_number":58,"context_line":"            size \u003d size + int(out[0])"},{"line_number":59,"context_line":"        except exception.ProcessExecutionError:"},{"line_number":60,"context_line":"            LOG.exception(_(\"An error occured while trying to \""},{"line_number":61,"context_line":"                            \"estimate backup size\"))"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a89bdaa_e46fcbc1","line":58,"range":{"start_line":58,"start_character":12,"end_line":58,"end_character":37},"updated":"2016-09-13 16:02:51.000000000","message":"When I try to create a backup, it goes into FAILED state with the following message:\n\n    2016-09-13 15:47:27.868 DEBUG trove.guestagent.backup.backupagent [-] Updated state for 0bbf31b1-0973-45a3-bac8-e3069f208c85 to {\u0027state\u0027: \u0027FAILED\u0027, \u0027backup_id\u0027: u\u00270bbf31b1-0973-45a3-bac8-e3069f208c85\u0027, \u0027size\u0027: 0.01}. from (pid\u003d1029) stream_backup_to_storage /home/ubuntu/trove/trove/guestagent/backup/backupagent.py:124\n    2016-09-13 15:47:27.868 ERROR oslo_messaging.rpc.server [-] Exception during message handling\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server Traceback (most recent call last):\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server   File \"/usr/local/lib/python2.7/dist-packages/oslo_messaging/rpc/server.py\", line 133, in _process_incoming\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server     res \u003d self.dispatcher.dispatch(message)\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server   File \"/usr/local/lib/python2.7/dist-packages/oslo_messaging/rpc/dispatcher.py\", line 150, in dispatch\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server     return self._do_dispatch(endpoint, method, ctxt, args)\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server   File \"/usr/local/lib/python2.7/dist-packages/oslo_messaging/rpc/dispatcher.py\", line 121, in _do_dispatch\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server     result \u003d func(ctxt, **new_args)\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server   File \"/usr/local/lib/python2.7/dist-packages/osprofiler/profiler.py\", line 154, in wrapper\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server     return f(*args, **kwargs)\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server   File \"/home/ubuntu/trove/trove/guestagent/datastore/experimental/db2/manager.py\", line 146, in create_backup\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server     backup.backup(context, backup_info)\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server   File \"/home/ubuntu/trove/trove/guestagent/backup/__init__.py\", line 33, in backup\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server     return AGENT.execute_backup(context, backup_info)\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server   File \"/home/ubuntu/trove/trove/guestagent/backup/backupagent.py\", line 151, in execute_backup\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server     parent_metadata, extra_opts)\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server   File \"/home/ubuntu/trove/trove/guestagent/backup/backupagent.py\", line 81, in stream_backup_to_storage\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server     **parent_metadata) as bkup:\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server   File \"/home/ubuntu/trove/trove/guestagent/strategies/backup/base.py\", line 71, in __enter__\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server     self._run_pre_backup()\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server   File \"/home/ubuntu/trove/trove/guestagent/strategies/backup/experimental/db2_impl.py\", line 83, in _run_pre_backup\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server     backup_size_bytes \u003d self.estimate_backup_size()\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server   File \"/home/ubuntu/trove/trove/guestagent/strategies/backup/experimental/db2_impl.py\", line 58, in estimate_backup_size\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server     size \u003d size + int(out[0])\n    2016-09-13 15:47:27.868 TRACE oslo_messaging.rpc.server UnboundLocalError: local variable \u0027out\u0027 referenced before assignment","commit_id":"28bcf691fc775f753e82ef53785c7c1278b9ae8e"}],"trove/guestagent/strategies/restore/experimental/db2_impl.py":[{"author":{"_account_id":9664,"name":"amrith","email":"amrith.kumar@gmail.com","username":"amrith"},"change_message_id":"c0b1f043a7db8f78e9f2a21badae0e6f438a9c49","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        LOG.info(_(\"Cleaning out restore location post: %s.\"),"},{"line_number":55,"context_line":"                 system.DB2_BACKUP_DIR)"},{"line_number":56,"context_line":"        operating_system.remove(system.DB2_BACKUP_DIR,"},{"line_number":57,"context_line":"                                force\u003dTrue,"},{"line_number":58,"context_line":"                                as_root\u003dTrue)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"class DB2OfflineBackup(DB2Backup):"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa7ab95a_92ccc1bc","line":58,"range":{"start_line":56,"start_character":0,"end_line":58,"end_character":45},"updated":"2016-09-01 19:44:10.000000000","message":"this block appears in enough places that it probably warrants a function","commit_id":"dc5f88198016e26251a456eca6afcf11a77e8b9e"},{"author":{"_account_id":10295,"name":"mariam john","email":"mariamj@us.ibm.com","username":"mariamj"},"change_message_id":"596a892cda1759a4d3dc007704c0f6bedddea9e5","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"        LOG.info(_(\"Cleaning out restore location post: %s.\"),"},{"line_number":55,"context_line":"                 system.DB2_BACKUP_DIR)"},{"line_number":56,"context_line":"        operating_system.remove(system.DB2_BACKUP_DIR,"},{"line_number":57,"context_line":"                                force\u003dTrue,"},{"line_number":58,"context_line":"                                as_root\u003dTrue)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"class DB2OfflineBackup(DB2Backup):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_538409d3","line":58,"range":{"start_line":56,"start_character":0,"end_line":58,"end_character":45},"in_reply_to":"fa7ab95a_92ccc1bc","updated":"2016-09-06 21:09:37.000000000","message":"Added 2 new functions in guestagent/datastore/experimental/db2/service.py - create_backup_dir and remove_backup_dir","commit_id":"dc5f88198016e26251a456eca6afcf11a77e8b9e"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"b9037657fc84866a32a545c0a2c3daf9c32c1f62","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        \"\"\""},{"line_number":42,"context_line":"        Restore from the directory that we untarred into"},{"line_number":43,"context_line":"        \"\"\""},{"line_number":44,"context_line":"        out, err \u003d utils.execute_with_timeout(system.GET_DB_NAMES,"},{"line_number":45,"context_line":"                                              shell\u003dTrue)"},{"line_number":46,"context_line":"        dbNames \u003d out.split()"},{"line_number":47,"context_line":"        for dbName in dbNames:"},{"line_number":48,"context_line":"            service.run_command(restore_command % {\u0027dbname\u0027: dbName})"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_674e20c3","line":45,"range":{"start_line":44,"start_character":8,"end_line":45,"end_character":57},"updated":"2016-09-13 18:33:18.000000000","message":"This fails with the following error:\n\n    2016-09-13 18:28:22.521 DEBUG trove.guestagent.strategies.restore.base [-] Restored 160 bytes from stream. from (pid\u003d1031) _unpack /home/ubuntu/trove/trove/guestagent/strategies/restore/base.py:92\n    2016-09-13 18:28:22.522 DEBUG oslo_concurrency.processutils [-] Running cmd (subprocess): find /home/db2inst1/db2inst1/backup/ -type f -name \u0027*.001\u0027 | grep -Po \"(?\u003c\u003dbackup/)[^.\u0027]*(?\u003d\\.)\" from (pid\u003d1031) execute /usr/local/lib/python2.7/dist-packages/oslo_concurrency/processutils.py:344\n    2016-09-13 18:28:22.530 DEBUG oslo_concurrency.processutils [-] CMD \"find /home/db2inst1/db2inst1/backup/ -type f -name \u0027*.001\u0027 | grep -Po \"(?\u003c\u003dbackup/)[^.\u0027]*(?\u003d\\.)\"\" returned: 1 in 0.008s from (pid\u003d1031) execute /usr/local/lib/python2.7/dist-packages/oslo_concurrency/processutils.py:374\n    2016-09-13 18:28:22.530 DEBUG oslo_concurrency.processutils [-] u\u0027find /home/db2inst1/db2inst1/backup/ -type f -name \\\u0027*.001\\\u0027 | grep -Po \"(?\u003c\u003dbackup/)[^.\\\u0027]*(?\u003d\\\\.)\"\u0027 failed. Not Retrying. from (pid\u003d1031) execute /usr/local/lib/python2.7/dist-packages/oslo_concurrency/processutils.py:422\n    2016-09-13 18:28:22.531 ERROR trove.guestagent.backup.backupagent [-] Error restoring backup 788f8050-337a-408d-addd-cb35d2e8f8a0.\n    2016-09-13 18:28:22.531 TRACE trove.guestagent.backup.backupagent Traceback (most recent call last):\n    2016-09-13 18:28:22.531 TRACE trove.guestagent.backup.backupagent   File \"/home/ubuntu/trove/trove/guestagent/backup/backupagent.py\", line 170, in execute_restore\n    2016-09-13 18:28:22.531 TRACE trove.guestagent.backup.backupagent     content_size \u003d runner.restore()\n    2016-09-13 18:28:22.531 TRACE trove.guestagent.backup.backupagent   File \"/home/ubuntu/trove/trove/guestagent/strategies/restore/base.py\", line 75, in restore\n    2016-09-13 18:28:22.531 TRACE trove.guestagent.backup.backupagent     self.post_restore()\n    2016-09-13 18:28:22.531 TRACE trove.guestagent.backup.backupagent   File \"/home/ubuntu/trove/trove/guestagent/strategies/restore/experimental/db2_impl.py\", line 66, in post_restore\n    2016-09-13 18:28:22.531 TRACE trove.guestagent.backup.backupagent     self._post_restore(system.RESTORE_OFFLINE_DB)\n    2016-09-13 18:28:22.531 TRACE trove.guestagent.backup.backupagent   File \"/home/ubuntu/trove/trove/guestagent/strategies/restore/experimental/db2_impl.py\", line 45, in _post_restore\n    2016-09-13 18:28:22.531 TRACE trove.guestagent.backup.backupagent     shell\u003dTrue)\n    2016-09-13 18:28:22.531 TRACE trove.guestagent.backup.backupagent   File \"/home/ubuntu/trove/trove/common/utils.py\", line 239, in execute_with_timeout\n    2016-09-13 18:28:22.531 TRACE trove.guestagent.backup.backupagent     return execute(*args, **kwargs)\n    2016-09-13 18:28:22.531 TRACE trove.guestagent.backup.backupagent   File \"/usr/local/lib/python2.7/dist-packages/oslo_concurrency/processutils.py\", line 389, in execute\n    2016-09-13 18:28:22.531 TRACE trove.guestagent.backup.backupagent     cmd\u003dsanitized_cmd)\n    2016-09-13 18:28:22.531 TRACE trove.guestagent.backup.backupagent ProcessExecutionError: Unexpected error while running command.\n    2016-09-13 18:28:22.531 TRACE trove.guestagent.backup.backupagent Command: find /home/db2inst1/db2inst1/backup/ -type f -name \u0027*.001\u0027 | grep -Po \"(?\u003c\u003dbackup/)[^.\u0027]*(?\u003d\\.)\"\n    2016-09-13 18:28:22.531 TRACE trove.guestagent.backup.backupagent Exit code: 1\n    2016-09-13 18:28:22.531 TRACE trove.guestagent.backup.backupagent Stdout: u\u0027\u0027\n    2016-09-13 18:28:22.531 TRACE trove.guestagent.backup.backupagent Stderr: u\u0027\u0027","commit_id":"ca6c1659c0b860b9f9a9d5e4b123167ba4f85969"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"7fad3ed89eacf08c163b1168fa2cf939abc38624","unresolved":false,"context_lines":[{"line_number":46,"context_line":"        try:"},{"line_number":47,"context_line":"            out, err \u003d utils.execute_with_timeout(system.GET_DB_NAMES,"},{"line_number":48,"context_line":"                                                  shell\u003dTrue)"},{"line_number":49,"context_line":"        except exception.ProcessExecutionError as pe:"},{"line_number":50,"context_line":"            LOG.error(\"Couldn\u0027t find any databases.\")"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        dbNames \u003d out.split()"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a8ec9b2_050c7193","line":49,"range":{"start_line":49,"start_character":46,"end_line":49,"end_character":52},"updated":"2016-09-13 20:21:24.000000000","message":"You don\u0027t use this var, so pep8 is complaining","commit_id":"9f943a340144bc82ba7762da0b4900420bd9ab65"},{"author":{"_account_id":10215,"name":"Peter Stachowski","email":"peter@tesora.com","username":"peterstac"},"change_message_id":"ef6304c338f050e84bf8b03389baa8078d05ab58","unresolved":false,"context_lines":[{"line_number":47,"context_line":"            out, err \u003d utils.execute_with_timeout(system.GET_DB_NAMES,"},{"line_number":48,"context_line":"                                                  shell\u003dTrue)"},{"line_number":49,"context_line":"        except exception.ProcessExecutionError as pe:"},{"line_number":50,"context_line":"            LOG.error(\"Couldn\u0027t find any databases.\")"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        dbNames \u003d out.split()"},{"line_number":53,"context_line":"        for dbName in dbNames:"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a8ec9b2_c55fe973","line":50,"range":{"start_line":50,"start_character":16,"end_line":50,"end_character":53},"updated":"2016-09-13 20:23:14.000000000","message":"Should this be an error?  if so, it should be internationalised ...\n\n  LOG.error(_(\"Couldn\u0027t find any databases.\"))","commit_id":"9f943a340144bc82ba7762da0b4900420bd9ab65"}]}
