)]}'
{"cinder/backup/manager.py":[{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"eee6dd80dca2a368bf08cac39feba5b125137c82","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Backup manager manages volume backups."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Volume Backups are full copies of persistent volumes stored in an backup"},{"line_number":20,"context_line":"store e.g. an object store or any other backup store if and when support is"},{"line_number":21,"context_line":"added. They are usable without the original object being available. A"},{"line_number":22,"context_line":"volume backup can be restored to the original volume it was created from or"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAPn%2F%2Fr3A%3D","line":19,"updated":"2013-06-25 10:26:59.000000000","message":"Nitpick: s/an backup/a backup/","commit_id":"e8c92e8875e7ae824221a4609251912b36e8fd15"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"9f2ae68135f358215a72653a96c4dd3ae0e84115","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Backup manager manages volume backups."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"Volume Backups are full copies of persistent volumes stored in an backup"},{"line_number":20,"context_line":"store e.g. an object store or any other backup store if and when support is"},{"line_number":21,"context_line":"added. They are usable without the original object being available. A"},{"line_number":22,"context_line":"volume backup can be restored to the original volume it was created from or"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Frks%3D","line":19,"updated":"2013-06-25 12:52:50.000000000","message":"s/an backup/a backup/","commit_id":"826e764e7da4f6212bba768d27eb99914480ad43"}],"cinder/backup/services/ceph.py":[{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"9f2ae68135f358215a72653a96c4dd3ae0e84115","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        Determine whether volume is RBD by querying known Ceph volume pool if"},{"line_number":134,"context_line":"        one exists."},{"line_number":135,"context_line":"        \"\"\""},{"line_number":136,"context_line":"        # TODO(dosaboy): this will be implemented as part of phase 2"},{"line_number":137,"context_line":"        return False"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def _backup_image_name(self, vol_name, backup_id):"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2Frjc%3D","line":136,"updated":"2013-06-25 12:52:50.000000000","message":"Please remove it until it is supported...","commit_id":"826e764e7da4f6212bba768d27eb99914480ad43"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"9f2ae68135f358215a72653a96c4dd3ae0e84115","unresolved":false,"context_lines":[{"line_number":143,"context_line":""},{"line_number":144,"context_line":"    def _backup_volume_from_rbd(self, name, volume, image_size):"},{"line_number":145,"context_line":"        \"\"\" Backup volume from RBD stream \"\"\""},{"line_number":146,"context_line":"        # TODO(dosaboy): this will be implemented as part of phase 2"},{"line_number":147,"context_line":"        raise NotImplementedError()"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"    def _backup_volume_from_file(self, image_name, image_size,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FrjU%3D","line":146,"updated":"2013-06-25 12:52:50.000000000","message":"Please remove it until it is supported","commit_id":"826e764e7da4f6212bba768d27eb99914480ad43"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"9f2ae68135f358215a72653a96c4dd3ae0e84115","unresolved":false,"context_lines":[{"line_number":199,"context_line":"        LOG.debug(_(\u0027Starting backup of volume %s to Ceph\u0027) % (volume[\u0027name\u0027]))"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"        if int(volume[\u0027size\u0027]) \u003d\u003d 0:"},{"line_number":202,"context_line":"            raise exception.InvalidParameterValue(\"need non-zero image size\")"},{"line_number":203,"context_line":"        else:"},{"line_number":204,"context_line":"            image_size \u003d int(volume[\u0027size\u0027]) * units.GiB"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAPn%2F%2FrjE%3D","line":202,"updated":"2013-06-25 12:52:50.000000000","message":"Please don\u0027t use the term \u0027image\u0027, since we use that for otehr things... \u0027source volume\u0027 instead maybe?","commit_id":"826e764e7da4f6212bba768d27eb99914480ad43"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"0917bb594b71e287f985f90969c4eb897c81d25b","unresolved":false,"context_lines":[{"line_number":46,"context_line":"                    \u0027into before transfer to backup store\u0027),"},{"line_number":47,"context_line":"    cfg.StrOpt(\u0027backup_ceph_pool\u0027, default\u003d\u0027backups\u0027,"},{"line_number":48,"context_line":"               help\u003d\u0027the Ceph pool to backup to\u0027),"},{"line_number":49,"context_line":"    cfg.StrOpt(\u0027backup_ceph_tmp_dir\u0027, default\u003d\u0027/tmp\u0027,"},{"line_number":50,"context_line":"               help\u003d\u0027Temporary directory in which to stage backup restores\u0027),"},{"line_number":51,"context_line":"    cfg.StrOpt(\u0027backup_ceph_stripe_unit\u0027, default\u003d0,"},{"line_number":52,"context_line":"               help\u003d\u0027RBD stripe unit to use when creating a backup image\u0027),"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2Fp14%3D","line":49,"updated":"2013-06-25 21:46:04.000000000","message":"don\u0027t need this anymore (or in the sample config file)","commit_id":"a103535e4dd028fc52e8863f0203f987df7d28e5"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"0917bb594b71e287f985f90969c4eb897c81d25b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"CONF.register_opts(service_opts)"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"class RADOSClient(object):"},{"line_number":62,"context_line":"    \"\"\""},{"line_number":63,"context_line":"    Context manager to simplify error handling for connecting to Ceph"},{"line_number":64,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2Fp0Q%3D","line":61,"updated":"2013-06-25 21:46:04.000000000","message":"it\u0027d be good to put the stuff copied from the driver in a common place both can reference, but that can be a later patch","commit_id":"a103535e4dd028fc52e8863f0203f987df7d28e5"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"0917bb594b71e287f985f90969c4eb897c81d25b","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        self.rbd_stripe_count \u003d int(CONF.backup_ceph_stripe_count)"},{"line_number":86,"context_line":"        self.rbd_stripe_unit \u003d int(CONF.backup_ceph_stripe_unit)"},{"line_number":87,"context_line":"        self._execute \u003d utils.execute"},{"line_number":88,"context_line":"        self._tmp_dir \u003d CONF.backup_ceph_tmp_dir"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    def _supports_layering(self):"},{"line_number":91,"context_line":"        \"\"\"Determine whether copy-on-write is supported\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2Fp1w%3D","line":88,"updated":"2013-06-25 21:46:04.000000000","message":"don\u0027t need this anymore","commit_id":"a103535e4dd028fc52e8863f0203f987df7d28e5"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"0917bb594b71e287f985f90969c4eb897c81d25b","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        features \u003d 0"},{"line_number":97,"context_line":"        if self._supports_layering():"},{"line_number":98,"context_line":"            old_format \u003d False"},{"line_number":99,"context_line":"            features \u003d self.rbd.RBD_FEATURE_LAYERING"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"        return (old_format, features)"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2Fp1c%3D","line":99,"updated":"2013-06-25 21:46:04.000000000","message":"you\u0027ll need RBD_FEATURE_STRIPINGV2 as well to be able to use non-default stripe_unit and stripe_count","commit_id":"a103535e4dd028fc52e8863f0203f987df7d28e5"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"0917bb594b71e287f985f90969c4eb897c81d25b","unresolved":false,"context_lines":[{"line_number":115,"context_line":"            client.shutdown()"},{"line_number":116,"context_line":"            raise"},{"line_number":117,"context_line":""},{"line_number":118,"context_line":"    def _ceph_args(self):"},{"line_number":119,"context_line":"        args \u003d []"},{"line_number":120,"context_line":"        if CONF.backup_ceph_user:"},{"line_number":121,"context_line":"            args.extend([\u0027--id\u0027, CONF.backup_ceph_user])"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2Fp04%3D","line":118,"updated":"2013-06-25 21:46:04.000000000","message":"this is unused now","commit_id":"a103535e4dd028fc52e8863f0203f987df7d28e5"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"0917bb594b71e287f985f90969c4eb897c81d25b","unresolved":false,"context_lines":[{"line_number":150,"context_line":"                                  old_format\u003dold_format,"},{"line_number":151,"context_line":"                                  features\u003dfeatures,"},{"line_number":152,"context_line":"                                  stripe_unit\u003dself.rbd_stripe_unit,"},{"line_number":153,"context_line":"                                  stripe_count\u003dself.rbd_stripe_count)"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"            LOG.debug(\"%s chunks of %s bytes to write to rbd image \u0027%s\u0027\" %"},{"line_number":156,"context_line":"                      (chunks, self.chunk_size, rbd_name))"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2Fp3U%3D","line":153,"updated":"2013-06-25 21:46:04.000000000","message":"Since we\u0027ve configured stripe_unit and stripe_count, we probably want to include object size as a config option too (and log2 it to get object order to pass to create here). Those three parameters determine object layout for rbd.\n\nAlso, stripe_unit and stripe_count aren\u0027t supported by old_format images. At this point I don\u0027t think it\u0027s too likely that will be a problem though, since everything bobtail and later supports the new format.","commit_id":"a103535e4dd028fc52e8863f0203f987df7d28e5"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"0917bb594b71e287f985f90969c4eb897c81d25b","unresolved":false,"context_lines":[{"line_number":201,"context_line":""},{"line_number":202,"context_line":"        self.db.backup_update(self.context, backup[\u0027id\u0027],"},{"line_number":203,"context_line":"                              {\u0027container\u0027: CONF.backup_ceph_pool,"},{"line_number":204,"context_line":"                               \u0027availability_zone\u0027: CONF.backup_ceph_fsid})"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        LOG.debug(_(\"backup \u0027%(backup_id)s\u0027 finished.\") % locals())"},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2Fp4Y%3D","line":204,"updated":"2013-06-25 21:46:04.000000000","message":"we can get the fsid actually used by the cluster from librados (client.cluster.get_fsid()) so that we don\u0027t depend on this config value","commit_id":"a103535e4dd028fc52e8863f0203f987df7d28e5"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"0917bb594b71e287f985f90969c4eb897c81d25b","unresolved":false,"context_lines":[{"line_number":203,"context_line":"                              {\u0027container\u0027: CONF.backup_ceph_pool,"},{"line_number":204,"context_line":"                               \u0027availability_zone\u0027: CONF.backup_ceph_fsid})"},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"        LOG.debug(_(\"backup \u0027%(backup_id)s\u0027 finished.\") % locals())"},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"    def restore(self, backup, volume_id, volume_file):"},{"line_number":209,"context_line":"        \"\"\"Restore the given volume backup from Ceph object store\"\"\""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2Fp4E%3D","line":206,"updated":"2013-06-25 21:46:04.000000000","message":"locals() usage is discouraged","commit_id":"a103535e4dd028fc52e8863f0203f987df7d28e5"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"0917bb594b71e287f985f90969c4eb897c81d25b","unresolved":false,"context_lines":[{"line_number":214,"context_line":"        rbd_name \u003d self._backup_rbd_name(volume[\u0027name\u0027], backup_id)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"        LOG.debug(_(\u0027starting backup restore from Ceph backup\u003d%(backup_id)s \u0027"},{"line_number":217,"context_line":"                    \u0027to volume\u003d%(vol_name)s\u0027) % locals())"},{"line_number":218,"context_line":""},{"line_number":219,"context_line":"        # Ensure we are at the beginning of the volume"},{"line_number":220,"context_line":"        volume_file.seek(0)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAAPn%2F%2Fp3o%3D","line":217,"updated":"2013-06-25 21:46:04.000000000","message":"locals() again","commit_id":"a103535e4dd028fc52e8863f0203f987df7d28e5"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"42339008f0dfcf0a97e395d164fad6a8ec18ed28","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"Ceph Backup Service Implementation\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from cinder.db import base"},{"line_number":19,"context_line":"from cinder import exception"},{"line_number":20,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":21,"context_line":"from cinder import units"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2Fnww%3D","line":18,"updated":"2013-06-26 21:28:44.000000000","message":"fix import order https://github.com/openstack/cinder/blob/master/HACKING.rst#human-alphabetical-order-examples","commit_id":"a1d7fabb5049b525efc809f9a6bc9348b8978f70"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"2da665f35bd176742c257ab9606f19ce9563ab85","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\"Ceph Backup Service Implementation\"\"\""},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from cinder.db import base"},{"line_number":19,"context_line":"from cinder import exception"},{"line_number":20,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":21,"context_line":"from cinder import units"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FlAU%3D","line":18,"in_reply_to":"AAAAPn%2F%2Fnww%3D","updated":"2013-06-27 13:24:45.000000000","message":"Done","commit_id":"a1d7fabb5049b525efc809f9a6bc9348b8978f70"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"42339008f0dfcf0a97e395d164fad6a8ec18ed28","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from cinder import exception"},{"line_number":20,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":21,"context_line":"from cinder import units"},{"line_number":22,"context_line":"from cinder import utils"},{"line_number":23,"context_line":"import eventlet"},{"line_number":24,"context_line":"import os"},{"line_number":25,"context_line":"from oslo.config import cfg"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FnxQ%3D","line":22,"updated":"2013-06-26 21:28:44.000000000","message":"utils is never used.","commit_id":"a1d7fabb5049b525efc809f9a6bc9348b8978f70"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"2da665f35bd176742c257ab9606f19ce9563ab85","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from cinder import exception"},{"line_number":20,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":21,"context_line":"from cinder import units"},{"line_number":22,"context_line":"from cinder import utils"},{"line_number":23,"context_line":"import eventlet"},{"line_number":24,"context_line":"import os"},{"line_number":25,"context_line":"from oslo.config import cfg"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FlAY%3D","line":22,"in_reply_to":"AAAAPn%2F%2FnxQ%3D","updated":"2013-06-27 13:24:45.000000000","message":"Done","commit_id":"a1d7fabb5049b525efc809f9a6bc9348b8978f70"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"db928deb8d07d3fd796c7190712f2184a505f941","unresolved":false,"context_lines":[{"line_number":56,"context_line":"CONF.register_opts(service_opts)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class CephBackupService(base.Base):"},{"line_number":60,"context_line":"    \"\"\"Backup up Cinder volumes to Ceph Object Store\"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def __init__(self, context, db_driver\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FmGg%3D","line":59,"updated":"2013-06-27 03:42:20.000000000","message":"Why do we inherit from cinder.db.base.Base? I know this came from the swift.py file, but I guess I\u0027m asking the general people that review this. I\u0027ll ping Duncan about it later, but might be something we correct in a later commit.","commit_id":"a1d7fabb5049b525efc809f9a6bc9348b8978f70"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"58f3cb53393ba31cfce31cca52cc527a3ce286a0","unresolved":false,"context_lines":[{"line_number":56,"context_line":"CONF.register_opts(service_opts)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class CephBackupService(base.Base):"},{"line_number":60,"context_line":"    \"\"\"Backup up Cinder volumes to Ceph Object Store\"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def __init__(self, context, db_driver\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FeoY%3D","line":59,"in_reply_to":"AAAAPn%2F%2Fljw%3D","updated":"2013-07-01 02:21:13.000000000","message":"Edward, pretty much what I already said, but thanks. :)","commit_id":"a1d7fabb5049b525efc809f9a6bc9348b8978f70"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"2da665f35bd176742c257ab9606f19ce9563ab85","unresolved":false,"context_lines":[{"line_number":56,"context_line":"CONF.register_opts(service_opts)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class CephBackupService(base.Base):"},{"line_number":60,"context_line":"    \"\"\"Backup up Cinder volumes to Ceph Object Store\"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def __init__(self, context, db_driver\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2Fljw%3D","line":59,"in_reply_to":"AAAAPn%2F%2FmGg%3D","updated":"2013-06-27 13:24:45.000000000","message":"Hi Mike, I think the plan is to resolve these sorts of issues (and have a wider discussion thereof) as part of bp/refactor-backup-service. I think there are a number of things that can be improved about the backup service (and this is definitely one of them) but I thought it would be better to deal with them separately to this blueprint since they would affect the swift driver too.","commit_id":"a1d7fabb5049b525efc809f9a6bc9348b8978f70"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"5459ae8284ac6e017a4621339051cf5a0a6b19a4","unresolved":false,"context_lines":[{"line_number":56,"context_line":"CONF.register_opts(service_opts)"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"class CephBackupService(base.Base):"},{"line_number":60,"context_line":"    \"\"\"Backup up Cinder volumes to Ceph Object Store\"\"\""},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"    def __init__(self, context, db_driver\u003dNone):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FlCU%3D","line":59,"in_reply_to":"AAAAPn%2F%2FmGg%3D","updated":"2013-06-27 13:12:50.000000000","message":"I can\u0027t remember... this might be cargo cult, not sure. I\u0027ll ask if anybody here can remember...","commit_id":"a1d7fabb5049b525efc809f9a6bc9348b8978f70"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"42339008f0dfcf0a97e395d164fad6a8ec18ed28","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        try:"},{"line_number":252,"context_line":"            with RADOSClient(self) as client:"},{"line_number":253,"context_line":"                self.rbd.RBD().remove(client.ioctx, rbd_name)"},{"line_number":254,"context_line":"        except self.rbd.ImageNotFound as exc:"},{"line_number":255,"context_line":"            LOG.debug(\"rbd image \u0027%s\u0027 not found but continuing anyway so \""},{"line_number":256,"context_line":"                      \"that db entry can be removed\" % (rbd_name))"},{"line_number":257,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FnxM%3D","line":254,"updated":"2013-06-26 21:28:44.000000000","message":"exc is never used.","commit_id":"a1d7fabb5049b525efc809f9a6bc9348b8978f70"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"2da665f35bd176742c257ab9606f19ce9563ab85","unresolved":false,"context_lines":[{"line_number":251,"context_line":"        try:"},{"line_number":252,"context_line":"            with RADOSClient(self) as client:"},{"line_number":253,"context_line":"                self.rbd.RBD().remove(client.ioctx, rbd_name)"},{"line_number":254,"context_line":"        except self.rbd.ImageNotFound as exc:"},{"line_number":255,"context_line":"            LOG.debug(\"rbd image \u0027%s\u0027 not found but continuing anyway so \""},{"line_number":256,"context_line":"                      \"that db entry can be removed\" % (rbd_name))"},{"line_number":257,"context_line":"            pass"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAAPn%2F%2FlAc%3D","line":254,"in_reply_to":"AAAAPn%2F%2FnxM%3D","updated":"2013-06-27 13:24:45.000000000","message":"Done","commit_id":"a1d7fabb5049b525efc809f9a6bc9348b8978f70"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"407089e9ba1c393e19e5b0040d4147c74b2dad80","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from cinder import exception"},{"line_number":20,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":21,"context_line":"from cinder import units"},{"line_number":22,"context_line":"from cinder.volume.drivers.rbd import RADOSClient"},{"line_number":23,"context_line":"import eventlet"},{"line_number":24,"context_line":"import os"},{"line_number":25,"context_line":"from oslo.config import cfg"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2Fens%3D","line":22,"updated":"2013-07-01 02:30:43.000000000","message":"import modules only, no objects. https://github.com/openstack/cinder/blob/master/HACKING.rst#imports","commit_id":"0bbf4a35e0b2b949ec011cea5d34efc65f51ca7e"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"7a6bf39320d7f56076a0ba4ed5bca28293714a71","unresolved":false,"context_lines":[{"line_number":19,"context_line":"from cinder import exception"},{"line_number":20,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":21,"context_line":"from cinder import units"},{"line_number":22,"context_line":"from cinder.volume.drivers.rbd import RADOSClient"},{"line_number":23,"context_line":"import eventlet"},{"line_number":24,"context_line":"import os"},{"line_number":25,"context_line":"from oslo.config import cfg"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2FeIg%3D","line":22,"in_reply_to":"AAAAPn%2F%2Fens%3D","updated":"2013-07-01 09:07:27.000000000","message":"Done","commit_id":"0bbf4a35e0b2b949ec011cea5d34efc65f51ca7e"}],"cinder/tests/test_backup_ceph.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"407089e9ba1c393e19e5b0040d4147c74b2dad80","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"\"\"\" Tests for Ceph backup service \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import filecmp"},{"line_number":18,"context_line":"import hashlib"},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import tempfile"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2Feng%3D","line":17,"updated":"2013-07-01 02:30:43.000000000","message":"filecmp is never used.","commit_id":"0bbf4a35e0b2b949ec011cea5d34efc65f51ca7e"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"7a6bf39320d7f56076a0ba4ed5bca28293714a71","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"\"\"\" Tests for Ceph backup service \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import filecmp"},{"line_number":18,"context_line":"import hashlib"},{"line_number":19,"context_line":"import os"},{"line_number":20,"context_line":"import tempfile"}],"source_content_type":"text/x-python","patch_set":10,"id":"AAAAPn%2F%2FeIk%3D","line":17,"in_reply_to":"AAAAPn%2F%2Feng%3D","updated":"2013-07-01 09:07:27.000000000","message":"Done","commit_id":"0bbf4a35e0b2b949ec011cea5d34efc65f51ca7e"}],"etc/cinder/cinder.conf.sample":[{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"9f2ae68135f358215a72653a96c4dd3ae0e84115","unresolved":false,"context_lines":[{"line_number":379,"context_line":"#backup_ceph_pool\u003dbackups"},{"line_number":380,"context_line":""},{"line_number":381,"context_line":"# A temporary directory in which to stage backup restores (string value)"},{"line_number":382,"context_line":"#backup_tmp_dir\u003d/tmp"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"# The RBD stripe unit to use when creating a backup image (integer value)"},{"line_number":385,"context_line":"#backup_stripe_unit\u003d0"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAAPn%2F%2Frkg%3D","line":382,"updated":"2013-06-25 12:52:50.000000000","message":"Add a ceph_ prefix to this please","commit_id":"826e764e7da4f6212bba768d27eb99914480ad43"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"9f2ae68135f358215a72653a96c4dd3ae0e84115","unresolved":false,"context_lines":[{"line_number":382,"context_line":"#backup_tmp_dir\u003d/tmp"},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"# The RBD stripe unit to use when creating a backup image (integer value)"},{"line_number":385,"context_line":"#backup_stripe_unit\u003d0"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"# The RBD stripe count to use when creating a backup image (integer value)"},{"line_number":388,"context_line":"#backup_stripe_count\u003d0"}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAAPn%2F%2FrkY%3D","line":385,"updated":"2013-06-25 12:52:50.000000000","message":"As above","commit_id":"826e764e7da4f6212bba768d27eb99914480ad43"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"9f2ae68135f358215a72653a96c4dd3ae0e84115","unresolved":false,"context_lines":[{"line_number":385,"context_line":"#backup_stripe_unit\u003d0"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"# The RBD stripe count to use when creating a backup image (integer value)"},{"line_number":388,"context_line":"#backup_stripe_count\u003d0"},{"line_number":389,"context_line":""},{"line_number":390,"context_line":"# The chunk size used to break up the data when transferring to Ceph object"},{"line_number":391,"context_line":"# store."}],"source_content_type":"application/octet-stream","patch_set":2,"id":"AAAAPn%2F%2FrkU%3D","line":388,"updated":"2013-06-25 12:52:50.000000000","message":"And again","commit_id":"826e764e7da4f6212bba768d27eb99914480ad43"}]}
