)]}'
{"cinder/backup/drivers/ceph.py":[{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"5a622ffabfe0f469bb2b71d39b3f2777fbaf5104","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"            base_name \u003d self._get_backup_base_name(volume_id, backup_id)"},{"line_number":417,"context_line":"            LOG.debug(_(\"Trying diff format name format \""},{"line_number":418,"context_line":"                        \"basename\u003d\u0027%(basename)s\u0027 for backup image of volume \""},{"line_number":419,"context_line":"                        \"%(volume)s.\") %"},{"line_number":420,"context_line":"                      {\u0027basename\u0027: base_name, \u0027volume\u0027: volume_id})"},{"line_number":421,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BjHQ%3D","line":418,"updated":"2014-02-20 16:00:27.000000000","message":"Please change to:\n\n\"Trying diff format basename\u003d\u0027%(basename)s\u0027 for backup base image of volume %(volume)s.\"","commit_id":"2cc931dde8f909ee25e197bc4e75f4b37abbb8b2"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"5a622ffabfe0f469bb2b71d39b3f2777fbaf5104","unresolved":false,"context_lines":[{"line_number":435,"context_line":"                    msg \u003d (_(\"Base image still has %(snapshots)s snapshots so \""},{"line_number":436,"context_line":"                             \"skipping delete of backup base image of volume \""},{"line_number":437,"context_line":"                             \"%(volume)s.\") %"},{"line_number":438,"context_line":"                           {\u0027snapshots\u0027: rem, \u0027volume\u0027: volume_id})"},{"line_number":439,"context_line":"                    LOG.info(msg)"},{"line_number":440,"context_line":"                    return"},{"line_number":441,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BjF0%3D","line":438,"updated":"2014-02-20 16:00:27.000000000","message":"Please change to:\n\n\"Backup base image of volume %(volume)s still has %(snapshots)s snapshots so skipping base image delete.\"","commit_id":"2cc931dde8f909ee25e197bc4e75f4b37abbb8b2"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"5a622ffabfe0f469bb2b71d39b3f2777fbaf5104","unresolved":false,"context_lines":[{"line_number":441,"context_line":""},{"line_number":442,"context_line":"                LOG.info(_(\"Deleting base image\u003d\u0027%(basename)s\u0027 backup of \""},{"line_number":443,"context_line":"                           \"volume %(volume)s.\") %"},{"line_number":444,"context_line":"                         {\u0027basename\u0027: base_name, \u0027volume\u0027: volume_id})"},{"line_number":445,"context_line":"                # Delete base if no more snapshots"},{"line_number":446,"context_line":"                try:"},{"line_number":447,"context_line":"                    self.rbd.RBD().remove(client.ioctx, base_name)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BjEY%3D","line":444,"updated":"2014-02-20 16:00:27.000000000","message":"Please change to:\n\n\"Deleting backup base image\u003d\u0027%(basename)s\u0027 of volume %(volume)s\"","commit_id":"2cc931dde8f909ee25e197bc4e75f4b37abbb8b2"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"5a622ffabfe0f469bb2b71d39b3f2777fbaf5104","unresolved":false,"context_lines":[{"line_number":452,"context_line":"                                   \"%(retries)s more time(s) in %(delay)ss.\") %"},{"line_number":453,"context_line":"                                 {\u0027retries\u0027: retries,"},{"line_number":454,"context_line":"                                  \u0027delay\u0027: delay,"},{"line_number":455,"context_line":"                                  \u0027volume\u0027: volume_id})"},{"line_number":456,"context_line":"                        eventlet.sleep(delay)"},{"line_number":457,"context_line":"                    else:"},{"line_number":458,"context_line":"                        LOG.error(_(\"Max retries reached deleting image of \""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BjD4%3D","line":455,"updated":"2014-02-20 16:00:27.000000000","message":"Please change to:\n\n\"Backup image of volume %(volume)s is busy...\"","commit_id":"2cc931dde8f909ee25e197bc4e75f4b37abbb8b2"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"5a622ffabfe0f469bb2b71d39b3f2777fbaf5104","unresolved":false,"context_lines":[{"line_number":455,"context_line":"                                  \u0027volume\u0027: volume_id})"},{"line_number":456,"context_line":"                        eventlet.sleep(delay)"},{"line_number":457,"context_line":"                    else:"},{"line_number":458,"context_line":"                        LOG.error(_(\"Max retries reached deleting image of \""},{"line_number":459,"context_line":"                                    \"volume %s - raising error.\") % volume_id)"},{"line_number":460,"context_line":"                        raise exc"},{"line_number":461,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BjCQ%3D","line":458,"updated":"2014-02-20 16:00:27.000000000","message":"Please change to:\n\n\"Max retries reached deleting backup \u0027%(backup)s\u0027 image of volume \u0027\u0027\u0027%(volume)s\u0027 - raising error\"","commit_id":"2cc931dde8f909ee25e197bc4e75f4b37abbb8b2"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"5a622ffabfe0f469bb2b71d39b3f2777fbaf5104","unresolved":false,"context_lines":[{"line_number":472,"context_line":"            if src_name in self.rbd.RBD().list(client.ioctx):"},{"line_number":473,"context_line":"                LOG.debug(_(\"Deleting source snapshot \u0027%(snapshot)s\u0027 of \""},{"line_number":474,"context_line":"                            \"%(volume)s.\") %"},{"line_number":475,"context_line":"                          {\u0027snapshot\u0027: snap, \u0027volume\u0027: volume_id})"},{"line_number":476,"context_line":"                src_rbd \u003d self.rbd.Image(client.ioctx, src_name)"},{"line_number":477,"context_line":"                try:"},{"line_number":478,"context_line":"                    src_rbd.remove_snap(snap)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BjBk%3D","line":475,"updated":"2014-02-20 16:00:27.000000000","message":"Please change to:\n\n\"Deleting source volume snapshot \u0027%(snapshot)s\u0027 for backup \u0027%(backup)s\u0027\"","commit_id":"2cc931dde8f909ee25e197bc4e75f4b37abbb8b2"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"5a622ffabfe0f469bb2b71d39b3f2777fbaf5104","unresolved":false,"context_lines":[{"line_number":558,"context_line":"        if name not in rbds:"},{"line_number":559,"context_line":"            msg \u003d _(\"Image \u0027%(name)s\u0027 of %(volume)s not found - trying\""},{"line_number":560,"context_line":"                    \" diff format name.\") % {\u0027name\u0027: name, \u0027volume\u0027: volume_id}"},{"line_number":561,"context_line":"            LOG.debug(msg)"},{"line_number":562,"context_line":"            if try_diff_format:"},{"line_number":563,"context_line":"                name \u003d self._get_backup_base_name(volume_id, diff_format\u003dTrue)"},{"line_number":564,"context_line":"                if name not in rbds:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BjBI%3D","line":561,"updated":"2014-02-20 16:00:27.000000000","message":"This is not necessarily for volume or backup so don\u0027t specify volume here.","commit_id":"2cc931dde8f909ee25e197bc4e75f4b37abbb8b2"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"5a622ffabfe0f469bb2b71d39b3f2777fbaf5104","unresolved":false,"context_lines":[{"line_number":564,"context_line":"                if name not in rbds:"},{"line_number":565,"context_line":"                    msg \u003d (_(\"Diff format image \u0027%(name)s\u0027 for volume \""},{"line_number":566,"context_line":"                             \"%(volume)s not found.\") %"},{"line_number":567,"context_line":"                           {\u0027name\u0027: name, \u0027volume\u0027: volume_id})"},{"line_number":568,"context_line":"                    LOG.debug(msg)"},{"line_number":569,"context_line":"                    return False, name"},{"line_number":570,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2BjAw%3D","line":567,"updated":"2014-02-20 16:00:27.000000000","message":"Again this is not for volumes so remove the refernece to volume.","commit_id":"2cc931dde8f909ee25e197bc4e75f4b37abbb8b2"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"5a622ffabfe0f469bb2b71d39b3f2777fbaf5104","unresolved":false,"context_lines":[{"line_number":630,"context_line":"                # then we cannot proceed (see above)"},{"line_number":631,"context_line":"                if not self._snap_exists(base_name, from_snap, client):"},{"line_number":632,"context_line":"                    errmsg \u003d (_(\"Snapshot\u003d\u0027%(snap)s\u0027 does not exist in base \""},{"line_number":633,"context_line":"                                \"image\u003d\u0027%(base)s\u0027 of volume %(volume)s - \""},{"line_number":634,"context_line":"                                \"aborting incremental backup.\") %"},{"line_number":635,"context_line":"                              {\u0027snap\u0027: from_snap,"},{"line_number":636,"context_line":"                               \u0027base\u0027: base_name,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2Bi%2FU%3D","line":633,"updated":"2014-02-20 16:00:27.000000000","message":"Again, this is wrong. The snapshot is NOT on a volume. It is the base image of a volume BACKUP.","commit_id":"2cc931dde8f909ee25e197bc4e75f4b37abbb8b2"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"5a622ffabfe0f469bb2b71d39b3f2777fbaf5104","unresolved":false,"context_lines":[{"line_number":643,"context_line":"        # Snapshot source volume so that we have a new point-in-time"},{"line_number":644,"context_line":"        new_snap \u003d self._get_new_snap_name(backup_id)"},{"line_number":645,"context_line":"        LOG.debug(_(\"Creating backup snapshot\u003d\u0027%(snapshot)s\u0027 of volume \""},{"line_number":646,"context_line":"                    \"%(volume)s.\") %"},{"line_number":647,"context_line":"                  {\u0027snapshot\u0027: new_snap, \u0027volume\u0027: volume_id})"},{"line_number":648,"context_line":"        source_rbd_image.create_snap(new_snap)"},{"line_number":649,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2Bi%2Bs%3D","line":646,"updated":"2014-02-20 16:00:27.000000000","message":"This is NOT a volume snapshot. It is a snapshot of the backup base image onto which a differential backup is stored","commit_id":"2cc931dde8f909ee25e197bc4e75f4b37abbb8b2"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"5a622ffabfe0f469bb2b71d39b3f2777fbaf5104","unresolved":false,"context_lines":[{"line_number":666,"context_line":""},{"line_number":667,"context_line":"            LOG.debug(_(\"Differential backup transfer of volume %(volume)s\""},{"line_number":668,"context_line":"                        \"completed in %(time).4fs.\") %"},{"line_number":669,"context_line":"                      {\u0027time\u0027: time.time() - before, \u0027volume\u0027: volume_id})"},{"line_number":670,"context_line":""},{"line_number":671,"context_line":"            # We don\u0027t need the previous snapshot (if there was one) anymore so"},{"line_number":672,"context_line":"            # delete it."}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2Bi%2Bc%3D","line":669,"updated":"2014-02-20 16:00:27.000000000","message":"remove the volume bit it just confuses things.","commit_id":"2cc931dde8f909ee25e197bc4e75f4b37abbb8b2"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"5a622ffabfe0f469bb2b71d39b3f2777fbaf5104","unresolved":false,"context_lines":[{"line_number":675,"context_line":""},{"line_number":676,"context_line":"        except exception.BackupRBDOperationFailed:"},{"line_number":677,"context_line":"            LOG.debug(_(\"Differential backup transfer of volume %s failed.\") %"},{"line_number":678,"context_line":"                      (volume_id))"},{"line_number":679,"context_line":""},{"line_number":680,"context_line":"            # Clean up if image was created as part of this operation"},{"line_number":681,"context_line":"            if image_created:"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2Bi%2BY%3D","line":678,"updated":"2014-02-20 16:00:27.000000000","message":"And here to.","commit_id":"2cc931dde8f909ee25e197bc4e75f4b37abbb8b2"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"5a622ffabfe0f469bb2b71d39b3f2777fbaf5104","unresolved":false,"context_lines":[{"line_number":707,"context_line":"        with rbd_driver.RADOSClient(self, self._ceph_backup_pool) as client:"},{"line_number":708,"context_line":"            # First create base backup image"},{"line_number":709,"context_line":"            old_format, features \u003d self._get_rbd_support()"},{"line_number":710,"context_line":"            LOG.debug(_(\"Creating base image\u003d\u0027%(name)s\u0027 of volume %(volume)s.\")"},{"line_number":711,"context_line":"                      % {\u0027name\u0027: backup_name, \u0027volume\u0027: volume_id})"},{"line_number":712,"context_line":"            self.rbd.RBD().create(ioctx\u003dclient.ioctx,"},{"line_number":713,"context_line":"                                  name\u003dbackup_name,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2Bi9Q%3D","line":710,"updated":"2014-02-20 16:00:27.000000000","message":"Not quite. This a backup base image to be used to store backups of the volume. So rewsord to:\n\n\"Creating backup base image \u0027%(name)s for volume %(volume)s\u0027\"","commit_id":"2cc931dde8f909ee25e197bc4e75f4b37abbb8b2"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"5a622ffabfe0f469bb2b71d39b3f2777fbaf5104","unresolved":false,"context_lines":[{"line_number":1086,"context_line":"                    # We return the restore point so that a full copy is done"},{"line_number":1087,"context_line":"                    # from snapshot."},{"line_number":1088,"context_line":"                    LOG.debug(_(\"Destination volume %s has extents - forcing \""},{"line_number":1089,"context_line":"                                \"full copy.\") % volume[\u0027id\u0027])"},{"line_number":1090,"context_line":"                    return False, restore_point"},{"line_number":1091,"context_line":""},{"line_number":1092,"context_line":"                return True, restore_point"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2Bi8M%3D","line":1089,"updated":"2014-02-20 16:00:27.000000000","message":"Please revert this. The point is that the volume has \u003e0 extents.","commit_id":"2cc931dde8f909ee25e197bc4e75f4b37abbb8b2"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"5a622ffabfe0f469bb2b71d39b3f2777fbaf5104","unresolved":false,"context_lines":[{"line_number":1125,"context_line":"            except exception.BackupRBDOperationFailed:"},{"line_number":1126,"context_line":"                LOG.debug(_(\"Forcing full restore of volume %s.\") %"},{"line_number":1127,"context_line":"                          volume[\u0027id\u0027])"},{"line_number":1128,"context_line":""},{"line_number":1129,"context_line":"        if do_full_restore:"},{"line_number":1130,"context_line":"            # Otherwise full copy"},{"line_number":1131,"context_line":"            self._full_restore(backup_id, backup_volume_id, volume_file,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2Bi64%3D","line":1128,"updated":"2014-02-20 16:00:27.000000000","message":"volume[\u0027id\u0027] is the target not the source.","commit_id":"2cc931dde8f909ee25e197bc4e75f4b37abbb8b2"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"5a622ffabfe0f469bb2b71d39b3f2777fbaf5104","unresolved":false,"context_lines":[{"line_number":1145,"context_line":"                    self.put_metadata(volume_id, meta)"},{"line_number":1146,"context_line":"                else:"},{"line_number":1147,"context_line":"                    LOG.debug(_(\"No backed up metadata for volume %s.\") %"},{"line_number":1148,"context_line":"                              volume_id)"},{"line_number":1149,"context_line":"        except exception.BackupMetadataUnsupportedVersion:"},{"line_number":1150,"context_line":"            msg \u003d _(\"Metadata restore failed due to incompatible version.\")"},{"line_number":1151,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2Bi6o%3D","line":1148,"updated":"2014-02-20 16:00:27.000000000","message":"volume_id is the target not the source.","commit_id":"2cc931dde8f909ee25e197bc4e75f4b37abbb8b2"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"5a622ffabfe0f469bb2b71d39b3f2777fbaf5104","unresolved":false,"context_lines":[{"line_number":1169,"context_line":"                fileno \u003d volume_file.fileno()"},{"line_number":1170,"context_line":"            except IOError:"},{"line_number":1171,"context_line":"                LOG.debug(_(\"Volume_file does not support fileno() so skipping\""},{"line_number":1172,"context_line":"                            \" fsync() to restore volume %s.\") % volume_id)"},{"line_number":1173,"context_line":"            else:"},{"line_number":1174,"context_line":"                os.fsync(fileno)"},{"line_number":1175,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAUX%2F%2Bi6A%3D","line":1172,"updated":"2014-02-20 16:00:27.000000000","message":"volume_id is the target not the source.","commit_id":"2cc931dde8f909ee25e197bc4e75f4b37abbb8b2"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"b7b2a37aadd4c70613e935a13202c7daf52b9f08","unresolved":false,"context_lines":[{"line_number":415,"context_line":""},{"line_number":416,"context_line":"            base_name \u003d self._get_backup_base_name(volume_id, backup_id)"},{"line_number":417,"context_line":"            LOG.debug(_(\"Trying diff format basename\u003d\u0027%(basename)s\u0027 for backup\""},{"line_number":418,"context_line":"                        \" base image of volume %(volume)s.\") %"},{"line_number":419,"context_line":"                      {\u0027basename\u0027: base_name, \u0027volume\u0027: volume_id})"},{"line_number":420,"context_line":""},{"line_number":421,"context_line":"        with rbd_driver.RADOSClient(self) as client:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUX%2F%2BZiI%3D","line":418,"updated":"2014-02-21 12:44:54.000000000","message":"nit: this whitespace should be at the end of the previous line.","commit_id":"c1e40956ba99176fd116e3262f62319ff0f56340"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"b7b2a37aadd4c70613e935a13202c7daf52b9f08","unresolved":false,"context_lines":[{"line_number":432,"context_line":"                                                         backup_id)"},{"line_number":433,"context_line":"                if rem:"},{"line_number":434,"context_line":"                    msg \u003d (_(\"Backup base image of volume %(volume)s still has\""},{"line_number":435,"context_line":"                             \" %(snapshots)s snapshots so skipping base image \""},{"line_number":436,"context_line":"                             \"delete.\") %"},{"line_number":437,"context_line":"                           {\u0027snapshots\u0027: rem, \u0027volume\u0027: volume_id})"},{"line_number":438,"context_line":"                    LOG.info(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUX%2F%2BZhM%3D","line":435,"updated":"2014-02-21 12:44:54.000000000","message":"nit: this whitespace should be at the end of the previous line.","commit_id":"c1e40956ba99176fd116e3262f62319ff0f56340"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"b7b2a37aadd4c70613e935a13202c7daf52b9f08","unresolved":false,"context_lines":[{"line_number":448,"context_line":"                    # Allow a retry if the image is busy"},{"line_number":449,"context_line":"                    if retries \u003e 0:"},{"line_number":450,"context_line":"                        LOG.info(_(\"Backup image of volume %(volume)s is \""},{"line_number":451,"context_line":"                                   \"busy...\") %"},{"line_number":452,"context_line":"                                 {\u0027retries\u0027: retries,"},{"line_number":453,"context_line":"                                  \u0027delay\u0027: delay,"},{"line_number":454,"context_line":"                                  \u0027volume\u0027: volume_id})"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUX%2F%2BZfM%3D","line":451,"updated":"2014-02-21 12:44:54.000000000","message":"Apologies for being clear in ps2 but the ... was meant to mean \u0027fill in with what is currently there\u0027 i.e.::\n\n\"Backup image of volume %(volume)s is busy, retrying %(retries)s more time(s) in %(delay)ss.\"","commit_id":"c1e40956ba99176fd116e3262f62319ff0f56340"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"b7b2a37aadd4c70613e935a13202c7daf52b9f08","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                    else:"},{"line_number":457,"context_line":"                        LOG.error(_(\"Max retries reached deleting backup \""},{"line_number":458,"context_line":"                                    \"%(basename)s image of volume %(volume)s -\""},{"line_number":459,"context_line":"                                    \" raising error.\") %"},{"line_number":460,"context_line":"                                  {\u0027volume\u0027: volume_id, \u0027basename\u0027: base_name})"},{"line_number":461,"context_line":"                        raise exc"},{"line_number":462,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUX%2F%2BZe4%3D","line":459,"updated":"2014-02-21 12:44:54.000000000","message":"nit: this whitespace should be a the end of the previous line","commit_id":"c1e40956ba99176fd116e3262f62319ff0f56340"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"b7b2a37aadd4c70613e935a13202c7daf52b9f08","unresolved":false,"context_lines":[{"line_number":676,"context_line":""},{"line_number":677,"context_line":"            # Delete snapshot"},{"line_number":678,"context_line":"            LOG.debug(_(\"Deleting backup snapshot\u003d\u0027%(snapshot)s\u0027 of volume \""},{"line_number":679,"context_line":"                        \"%(volume)s.\") %"},{"line_number":680,"context_line":"                      {\u0027snapshot\u0027: new_snap, \u0027volume\u0027: volume_id})"},{"line_number":681,"context_line":"            source_rbd_image.remove_snap(new_snap)"},{"line_number":682,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUX%2F%2BZc4%3D","line":679,"updated":"2014-02-21 12:44:54.000000000","message":"Might as well be clear here i.e.\n\n\"Deleting diff backup snapshot\u003d\u0027%(snapshot)s\u0027 of source volume\u003d\u0027%(volume)s\u0027.\"","commit_id":"c1e40956ba99176fd116e3262f62319ff0f56340"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"b7b2a37aadd4c70613e935a13202c7daf52b9f08","unresolved":false,"context_lines":[{"line_number":1086,"context_line":"            else:"},{"line_number":1087,"context_line":"                LOG.info(_(\"No restore point found for backup\u003d\u0027%(backup)s\u0027 of \""},{"line_number":1088,"context_line":"                           \"volume %(volume)s, forcing full copy.\") %"},{"line_number":1089,"context_line":"                         {\u0027backup\u0027: backup[\u0027id\u0027], \u0027volume\u0027: volume[\u0027id\u0027]})"},{"line_number":1090,"context_line":""},{"line_number":1091,"context_line":"        return not_allowed"},{"line_number":1092,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUX%2F%2BZXQ%3D","line":1089,"updated":"2014-02-21 12:44:54.000000000","message":"volume[\u0027id\u0027] is the target not the source. Instead it should be backup[\u0027volume_id\u0027] i.e.:\n\n{\u0027backup\u0027: backup[\u0027id\u0027], \u0027volume\u0027: backup[\u0027volume_id\u0027]}","commit_id":"c1e40956ba99176fd116e3262f62319ff0f56340"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"b7b2a37aadd4c70613e935a13202c7daf52b9f08","unresolved":false,"context_lines":[{"line_number":1138,"context_line":"                    self.put_metadata(volume_id, meta)"},{"line_number":1139,"context_line":"                else:"},{"line_number":1140,"context_line":"                    LOG.debug(_(\"Volume has no backed up metadata.\") %"},{"line_number":1141,"context_line":"                              volume_id)"},{"line_number":1142,"context_line":"        except exception.BackupMetadataUnsupportedVersion:"},{"line_number":1143,"context_line":"            msg \u003d _(\"Metadata restore failed due to incompatible version.\")"},{"line_number":1144,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAUX%2F%2BZVg%3D","line":1141,"updated":"2014-02-21 12:44:54.000000000","message":"Missing %s and again, volume_id is the target not the source. Instead it should be backup[\u0027volume_id\u0027] i.e.:\n\n(\"Volume %s has no backed up metadata.\") % backup[\u0027volume_id\u0027]","commit_id":"c1e40956ba99176fd116e3262f62319ff0f56340"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"72631f9978208691949cae5f0a8c56731f407ecf","unresolved":false,"context_lines":[{"line_number":1086,"context_line":"                return True, restore_point"},{"line_number":1087,"context_line":"            else:"},{"line_number":1088,"context_line":"                LOG.info(_(\"No restore point found for backup\u003d\u0027%(backup)s\u0027 of \""},{"line_number":1089,"context_line":"                           \"volume %(volume)s, forcing full copy.\") %"},{"line_number":1090,"context_line":"                         {\u0027backup\u0027: backup[\u0027id\u0027],"},{"line_number":1091,"context_line":"                          \u0027volume\u0027: backup[\u0027volume_id\u0027]})"},{"line_number":1092,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2BWkw%3D","line":1089,"updated":"2014-02-21 17:35:52.000000000","message":"nit: \"volume %(volume)s, forcing full copy\" should be \"volume %(volume)s - forcing full copy\" i.e. replace \u0027,\u0027 with a \u0027-\u0027","commit_id":"b2b99848aa68aff6dd7542dc0c953b6e5755a854"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"72631f9978208691949cae5f0a8c56731f407ecf","unresolved":false,"context_lines":[{"line_number":1164,"context_line":"                fileno \u003d volume_file.fileno()"},{"line_number":1165,"context_line":"            except IOError:"},{"line_number":1166,"context_line":"                LOG.debug(_(\"Volume_file does not support fileno() so skipping\""},{"line_number":1167,"context_line":"                            \" fsync().\"))"},{"line_number":1168,"context_line":"            else:"},{"line_number":1169,"context_line":"                os.fsync(fileno)"},{"line_number":1170,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2BWro%3D","line":1167,"updated":"2014-02-21 17:35:52.000000000","message":"nit: whitespace should be at end of previous line\n\nWe could also change this to:\n\n\"Target IO object does not support fileno() - skipping fsync.\"","commit_id":"b2b99848aa68aff6dd7542dc0c953b6e5755a854"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"72631f9978208691949cae5f0a8c56731f407ecf","unresolved":false,"context_lines":[{"line_number":1179,"context_line":""},{"line_number":1180,"context_line":"    def delete(self, backup):"},{"line_number":1181,"context_line":"        \"\"\"Delete the given backup from Ceph object store.\"\"\""},{"line_number":1182,"context_line":"        backup_id \u003d backup[\u0027id\u0027]"},{"line_number":1183,"context_line":"        LOG.debug(_(\u0027Delete started for backup\u003d%s.\u0027) % backup[\u0027id\u0027])"},{"line_number":1184,"context_line":""},{"line_number":1185,"context_line":"        delete_failed \u003d False"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2BWes%3D","line":1182,"updated":"2014-02-21 17:35:52.000000000","message":"nit: backup_id is no longer used since you are always using backup[\u0027id\u0027] so you could remove this.","commit_id":"b2b99848aa68aff6dd7542dc0c953b6e5755a854"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"72631f9978208691949cae5f0a8c56731f407ecf","unresolved":false,"context_lines":[{"line_number":1187,"context_line":"            self._try_delete_base_image(backup[\u0027id\u0027], backup[\u0027volume_id\u0027])"},{"line_number":1188,"context_line":"        except self.rbd.ImageNotFound:"},{"line_number":1189,"context_line":"            msg \u003d (_(\"RBD image for backup %(backup)s of volume %(volume)s not\""},{"line_number":1190,"context_line":"                     \" found but continuing anyway so that we can attempt to \""},{"line_number":1191,"context_line":"                     \"delete metadata backup and db entry can be removed.\") %"},{"line_number":1192,"context_line":"                   {\u0027backup\u0027: backup[\u0027id\u0027], \u0027volume\u0027: backup[\u0027volume_id\u0027]})"},{"line_number":1193,"context_line":"            LOG.warning(msg)"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2BWrk%3D","line":1190,"updated":"2014-02-21 17:35:52.000000000","message":"nit: whitespace should be at end of previous line","commit_id":"b2b99848aa68aff6dd7542dc0c953b6e5755a854"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"72631f9978208691949cae5f0a8c56731f407ecf","unresolved":false,"context_lines":[{"line_number":1202,"context_line":"                     {\u0027backup\u0027: backup[\u0027id\u0027], \u0027volume\u0027: backup[\u0027volume_id\u0027]})"},{"line_number":1203,"context_line":"        else:"},{"line_number":1204,"context_line":"            LOG.debug(_(\"Delete of backup \u0027%(backup)s\u0027 for volume \u0027%(volume)s\u0027\""},{"line_number":1205,"context_line":"                        \" \u0027%(backup)s\u0027 finished.\") %"},{"line_number":1206,"context_line":"                      {\u0027backup\u0027: backup[\u0027id\u0027], \u0027volume\u0027: backup[\u0027volume_id\u0027]})"},{"line_number":1207,"context_line":""},{"line_number":1208,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAAUX%2F%2BWrc%3D","line":1205,"updated":"2014-02-21 17:35:52.000000000","message":"nit: whitespace should be at end of previous line","commit_id":"b2b99848aa68aff6dd7542dc0c953b6e5755a854"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"7a10f708f7db87d8438d8fefad50e9cc535f15bd","unresolved":false,"context_lines":[{"line_number":1164,"context_line":"                fileno \u003d volume_file.fileno()"},{"line_number":1165,"context_line":"            except IOError:"},{"line_number":1166,"context_line":"                LOG.debug(_(\"Target I/O does not support fileno() - \""},{"line_number":1167,"context_line":"                            \"skipping fsync().\"))"},{"line_number":1168,"context_line":"            else:"},{"line_number":1169,"context_line":"                os.fsync(fileno)"},{"line_number":1170,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAAU3%2F%2F%2F0k%3D","line":1167,"updated":"2014-02-22 18:21:38.000000000","message":"This is not what I requested i.e. you missed the \u0027object\u0027 part so should be\n\n\"Restore target I/O object does not support fileno() - skipping call to fsync()\"\n\nas in implementation of http://docs.python.org/2/library/io.html\n\nSorry for the pedantry but I really feel the is necessary for the message to make sense.","commit_id":"7089768e71be06a8ff3e81bd3075c68b99d74eb9"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"07f71798203b3ada0587461a50183578f2ddec28","unresolved":false,"context_lines":[{"line_number":456,"context_line":"                    else:"},{"line_number":457,"context_line":"                        LOG.error(_(\"Max retries reached deleting backup \""},{"line_number":458,"context_line":"                                    \"%(basename)s image of volume %(volume)s \""},{"line_number":459,"context_line":"                                    \"- raising error.\") %"},{"line_number":460,"context_line":"                                  {\u0027volume\u0027: volume_id, \u0027basename\u0027: base_name})"},{"line_number":461,"context_line":"                        raise exc"},{"line_number":462,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2FgVU%3D","line":459,"updated":"2014-03-17 14:02:37.000000000","message":"Don\u0027t really need to have \"raising error\" here, it will follow immediately in the logs.","commit_id":"86f956cd58bd86803a9bcaaabb98c872f912adfd"},{"author":{"_account_id":7236,"name":"Kiyohiro Adachi","email":"kiy-adachi@vx.jp.nec.com","username":"kadachi"},"change_message_id":"9909ad5a886142e5e07a08e96425429042438912","unresolved":false,"context_lines":[{"line_number":710,"context_line":"                                  stripe_unit\u003dself.rbd_stripe_unit,"},{"line_number":711,"context_line":"                                  stripe_count\u003dself.rbd_stripe_count)"},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"            LOG.debug(_(\"Copying data from volume %s.\") % (volume_id))"},{"line_number":714,"context_line":"            dest_rbd \u003d self.rbd.Image(client.ioctx, backup_name)"},{"line_number":715,"context_line":"            try:"},{"line_number":716,"context_line":"                rbd_meta \u003d rbd_driver.RBDImageMetadata(dest_rbd,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAVn%2F%2FESs%3D","line":713,"updated":"2014-03-10 08:39:42.000000000","message":"At volume_id,  is \u0027()\u0027 the needed? Thanks.","commit_id":"86f956cd58bd86803a9bcaaabb98c872f912adfd"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"f42c12fe2c93e157c9c497a03a9d355218e89d10","unresolved":false,"context_lines":[{"line_number":710,"context_line":"                                  stripe_unit\u003dself.rbd_stripe_unit,"},{"line_number":711,"context_line":"                                  stripe_count\u003dself.rbd_stripe_count)"},{"line_number":712,"context_line":""},{"line_number":713,"context_line":"            LOG.debug(_(\"Copying data from volume %s.\") % (volume_id))"},{"line_number":714,"context_line":"            dest_rbd \u003d self.rbd.Image(client.ioctx, backup_name)"},{"line_number":715,"context_line":"            try:"},{"line_number":716,"context_line":"                rbd_meta \u003d rbd_driver.RBDImageMetadata(dest_rbd,"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2Fo74%3D","line":713,"in_reply_to":"AAAAVn%2F%2FESs%3D","updated":"2014-03-14 20:09:31.000000000","message":"Not really, but not worth respinning this for that.  :-)","commit_id":"86f956cd58bd86803a9bcaaabb98c872f912adfd"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"f42c12fe2c93e157c9c497a03a9d355218e89d10","unresolved":false,"context_lines":[{"line_number":826,"context_line":"        \"\"\""},{"line_number":827,"context_line":"        json_meta \u003d self.get_metadata(backup[\u0027volume_id\u0027])"},{"line_number":828,"context_line":"        if not json_meta:"},{"line_number":829,"context_line":"            LOG.debug(\"No metadata to backup for volume %s.\" %"},{"line_number":830,"context_line":"                      backup[\u0027volume_id\u0027])"},{"line_number":831,"context_line":"            return"},{"line_number":832,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2Fo7U%3D","line":829,"updated":"2014-03-14 20:09:31.000000000","message":"If you respin for some reason it would be worth adding _() here.","commit_id":"86f956cd58bd86803a9bcaaabb98c872f912adfd"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"f42c12fe2c93e157c9c497a03a9d355218e89d10","unresolved":false,"context_lines":[{"line_number":831,"context_line":"            return"},{"line_number":832,"context_line":""},{"line_number":833,"context_line":"        LOG.debug(\"Backing up metadata for volume %s.\" %"},{"line_number":834,"context_line":"                  backup[\u0027volume_id\u0027])"},{"line_number":835,"context_line":"        try:"},{"line_number":836,"context_line":"            with rbd_driver.RADOSClient(self) as client:"},{"line_number":837,"context_line":"                vol_meta_backup \u003d VolumeMetadataBackup(client, backup[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2Fo7I%3D","line":834,"updated":"2014-03-14 20:09:31.000000000","message":"Same here for consistency.","commit_id":"86f956cd58bd86803a9bcaaabb98c872f912adfd"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"07f71798203b3ada0587461a50183578f2ddec28","unresolved":false,"context_lines":[{"line_number":1184,"context_line":"        except self.rbd.ImageNotFound:"},{"line_number":1185,"context_line":"            msg \u003d (_(\"RBD image for backup %(backup)s of volume %(volume)s \""},{"line_number":1186,"context_line":"                     \"not found but continuing anyway so that we can attempt \""},{"line_number":1187,"context_line":"                     \"to delete metadata backup and db entry can be removed.\")"},{"line_number":1188,"context_line":"                   % {\u0027backup\u0027: backup[\u0027id\u0027], \u0027volume\u0027: backup[\u0027volume_id\u0027]})"},{"line_number":1189,"context_line":"            LOG.warning(msg)"},{"line_number":1190,"context_line":"            delete_failed \u003d True"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAAWH%2F%2FgWw%3D","line":1187,"updated":"2014-03-17 14:02:37.000000000","message":"This message should probably be something closer to\n\"RBD image for backup %(backup)s of volume %(volume)s not found.  Deleting backed up metadata and backup records.\"\n\nI think that would be easier to understand.  (Feel free to reword.)","commit_id":"86f956cd58bd86803a9bcaaabb98c872f912adfd"}]}
