)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6506,"name":"Anastasia Guzikova","email":"aguzikova@mirantis.com","username":"aguzikova"},"change_message_id":"5c19436610416883668424d13178a362c4fd2dd7","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Edward Hope-Morley \u003cedward.hope-morley@canonical.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-10-31 15:05:01 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds volume metadata to backups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit adds a new versiond api to the backup"},{"line_number":10,"context_line":"driver base class which all backup drivers will use"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAATn%2F%2FjlY%3D","line":7,"updated":"2013-11-01 12:31:45.000000000","message":"shouldn\u0027t there be \u0027Add\u0027 instead \u0027Adds\u0027?","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"221ef053b2b5ae5678b7d6c4bf4400847faaa189","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Edward Hope-Morley \u003cedward.hope-morley@canonical.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2013-10-31 15:05:01 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds volume metadata to backups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit adds a new versiond api to the backup"},{"line_number":10,"context_line":"driver base class which all backup drivers will use"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAATn%2F%2FcVg%3D","line":7,"in_reply_to":"AAAATn%2F%2FjlY%3D","updated":"2013-11-06 04:32:29.000000000","message":"Nope this is correct. \"Adds\" as in \"This adds...\"","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":6506,"name":"Anastasia Guzikova","email":"aguzikova@mirantis.com","username":"aguzikova"},"change_message_id":"5c19436610416883668424d13178a362c4fd2dd7","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds volume metadata to backups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit adds a new versiond api to the backup"},{"line_number":10,"context_line":"driver base class which all backup drivers will use"},{"line_number":11,"context_line":"to extract a canonical set of metadata which is"},{"line_number":12,"context_line":"common to all implmemtations."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAATn%2F%2FjlM%3D","line":9,"updated":"2013-11-01 12:31:45.000000000","message":"a typo, s/versiond/version/","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"221ef053b2b5ae5678b7d6c4bf4400847faaa189","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Adds volume metadata to backups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This commit adds a new versiond api to the backup"},{"line_number":10,"context_line":"driver base class which all backup drivers will use"},{"line_number":11,"context_line":"to extract a canonical set of metadata which is"},{"line_number":12,"context_line":"common to all implmemtations."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAATn%2F%2FcVc%3D","line":9,"in_reply_to":"AAAATn%2F%2FjlM%3D","updated":"2013-11-06 04:32:29.000000000","message":"I\u0027ll fix this up.","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":6506,"name":"Anastasia Guzikova","email":"aguzikova@mirantis.com","username":"aguzikova"},"change_message_id":"5c19436610416883668424d13178a362c4fd2dd7","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This commit adds a new versiond api to the backup"},{"line_number":10,"context_line":"driver base class which all backup drivers will use"},{"line_number":11,"context_line":"to extract a canonical set of metadata which is"},{"line_number":12,"context_line":"common to all implmemtations."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This new api is now used by the Ceph backup driver"},{"line_number":15,"context_line":"to backup volume metadata (includes glance metadata)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAATn%2F%2FjlE%3D","line":12,"updated":"2013-11-01 12:31:45.000000000","message":"a typo, s/implmemtations/implementations/","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"221ef053b2b5ae5678b7d6c4bf4400847faaa189","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This commit adds a new versiond api to the backup"},{"line_number":10,"context_line":"driver base class which all backup drivers will use"},{"line_number":11,"context_line":"to extract a canonical set of metadata which is"},{"line_number":12,"context_line":"common to all implmemtations."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"This new api is now used by the Ceph backup driver"},{"line_number":15,"context_line":"to backup volume metadata (includes glance metadata)"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"AAAATn%2F%2FcVU%3D","line":12,"in_reply_to":"AAAATn%2F%2FjlE%3D","updated":"2013-11-06 04:32:29.000000000","message":"I\u0027ll fix this one up.","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4084f046fe734152a074e43952e8362f65fadc7a","unresolved":false,"context_lines":[{"line_number":19,"context_line":"It is expected that the other backup driver"},{"line_number":20,"context_line":"implementations will follow suite and adopt this approach."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Implements: blueprint cinder-backup-volume-metadata-support"},{"line_number":23,"context_line":"Fixes: bug 1137908"},{"line_number":24,"context_line":"Change-Id: Icf2f1202d827d2435e09f5dad0f6f022f35dceee"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"AAAATn%2F%2FIwo%3D","line":22,"updated":"2013-11-13 23:31:08.000000000","message":"Need to add DocImpact since you are changing config options.","commit_id":"3248b122b5ac18ed3863e2be7d4a79de98a23c60"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"085e66dd6763ebbaa27c78085fdad23650b85211","unresolved":false,"context_lines":[{"line_number":17,"context_line":"original was bootable."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"It is expected that the other backup driver"},{"line_number":20,"context_line":"implementations will follow suite and adopt this approach."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Implements: blueprint cinder-backup-volume-metadata-support"},{"line_number":23,"context_line":"Fixes: bug 1137908"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAATn%2F%2BxCA%3D","line":20,"updated":"2013-11-20 14:49:08.000000000","message":"Typo: suite -\u003e suit","commit_id":"4e3d2942376bcd0c006c40f8c2d2fdaa28d5ced1"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"3206ab1e365a64f9f4e48cb175c487419b6e6fa6","unresolved":false,"context_lines":[{"line_number":17,"context_line":"original was bootable."},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"It is expected that the other backup driver"},{"line_number":20,"context_line":"implementations will follow suite and adopt this approach."},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"Implements: blueprint cinder-backup-volume-metadata-support"},{"line_number":23,"context_line":"Fixes: bug 1137908"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"AAAATn%2F%2BwsI%3D","line":20,"in_reply_to":"AAAATn%2F%2BxCA%3D","updated":"2013-11-20 15:13:44.000000000","message":"good catch.","commit_id":"4e3d2942376bcd0c006c40f8c2d2fdaa28d5ced1"}],"cinder/backup/driver.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"af32914fc534c42b928bb8a89884013fea91fdb6","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                    meta_container[\u0027glance\u0027][entry.key] \u003d entry.value"},{"line_number":55,"context_line":"        except exception.GlanceMetadataNotFound:"},{"line_number":56,"context_line":"            pass"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        return meta_container"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def _v1_metadata_set(self, volume_id, meta_container):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FT%2FU%3D","line":57,"updated":"2013-11-11 07:03:07.000000000","message":"I think there is other metadata that could be useful to save which isn\u0027t strictly stored in \u0027metadata\u0027: volume[\u0027name\u0027], volume[\u0027display_name\u0027], volume[\u0027display_description\u0027].  We definitely need volume[\u0027encryption_key_id\u0027] if we ever want to be able to decrypt an encrypted backup.  There is also the question of admin_metadata, which the user can\u0027t see today, and should remain hidden, but contains the read_only flag today which is useful to save.","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"dad0c2c331b1e3a719ba611a5bc41380b8b6f1e6","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                    meta_container[\u0027glance\u0027][entry.key] \u003d entry.value"},{"line_number":55,"context_line":"        except exception.GlanceMetadataNotFound:"},{"line_number":56,"context_line":"            pass"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"        return meta_container"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def _v1_metadata_set(self, volume_id, meta_container):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FTng%3D","line":57,"in_reply_to":"AAAATn%2F%2FT%2FU%3D","updated":"2013-11-11 09:55:56.000000000","message":"Exactly the feedback I was after! Thanks Avishay I\u0027ll add that in. For the admin metadata I can just backup a subset (read_only for now) and we can add to it as and when.","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"af32914fc534c42b928bb8a89884013fea91fdb6","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                except exception.GlanceMetadataExists:"},{"line_number":78,"context_line":"                    # TODO(dosaboy): if we are restoring to volume that"},{"line_number":79,"context_line":"                    #                already has metadata is this going to"},{"line_number":80,"context_line":"                    #                be a problem?"},{"line_number":81,"context_line":"                    LOG.info(\"glance metadata already exists for this \""},{"line_number":82,"context_line":"                             \"volume so skipping restore glance matadata\")"},{"line_number":83,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FT%2FE%3D","line":80,"updated":"2013-11-11 07:03:07.000000000","message":"I think we should over-write everything (i.e., delete and then create metadata).  This is analogous to restoring the data, where everything is over-written.","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"dad0c2c331b1e3a719ba611a5bc41380b8b6f1e6","unresolved":false,"context_lines":[{"line_number":77,"context_line":"                except exception.GlanceMetadataExists:"},{"line_number":78,"context_line":"                    # TODO(dosaboy): if we are restoring to volume that"},{"line_number":79,"context_line":"                    #                already has metadata is this going to"},{"line_number":80,"context_line":"                    #                be a problem?"},{"line_number":81,"context_line":"                    LOG.info(\"glance metadata already exists for this \""},{"line_number":82,"context_line":"                             \"volume so skipping restore glance matadata\")"},{"line_number":83,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FTo0%3D","line":80,"in_reply_to":"AAAATn%2F%2FT%2FE%3D","updated":"2013-11-11 09:55:56.000000000","message":"Agreed. I\u0027ll get this fixed up.","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4084f046fe734152a074e43952e8362f65fadc7a","unresolved":false,"context_lines":[{"line_number":64,"context_line":"                for entry in meta:"},{"line_number":65,"context_line":"                    meta_container[type_tag][entry.key] \u003d entry.value"},{"line_number":66,"context_line":"        except exception.GlanceMetadataNotFound:"},{"line_number":67,"context_line":"            LOG.debug(_(\"no metadata type \u0027%s\u0027 available\") % type_tag)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"        # Only backup a selection of the volume details"},{"line_number":70,"context_line":"        type_tag \u003d self.TYPE_TAG_VOL_BASE_META"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FI2c%3D","line":67,"updated":"2013-11-13 23:31:08.000000000","message":"Eating exceptions quietly always worries me.  Seems like this might be better as a LOG.info and then be \"No metadata type \u0027%s\u0027 available.\"","commit_id":"3248b122b5ac18ed3863e2be7d4a79de98a23c60"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4084f046fe734152a074e43952e8362f65fadc7a","unresolved":false,"context_lines":[{"line_number":143,"context_line":"        if version \u003d\u003d 1:"},{"line_number":144,"context_line":"            meta_container \u003d self._v1_metadata_get(volume_id)"},{"line_number":145,"context_line":"        else:"},{"line_number":146,"context_line":"            msg \u003d (_(\"unsupported backup metadata version (%s)\") %"},{"line_number":147,"context_line":"                   (version))"},{"line_number":148,"context_line":"            raise exception.BackupMetadataUnsupportedVersion(msg)"},{"line_number":149,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FI24%3D","line":146,"updated":"2013-11-13 23:31:08.000000000","message":"Suggest rewording this:  \"Unsupported backup metadata version: %s\"","commit_id":"3248b122b5ac18ed3863e2be7d4a79de98a23c60"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4084f046fe734152a074e43952e8362f65fadc7a","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        if version \u003d\u003d 1:"},{"line_number":159,"context_line":"            self._v1_metadata_put(volume_id, meta_container)"},{"line_number":160,"context_line":"        else:"},{"line_number":161,"context_line":"            msg \u003d (_(\"unsupported backup metadata version (%s)\") %"},{"line_number":162,"context_line":"                   (version))"},{"line_number":163,"context_line":"            raise exception.BackupMetadataUnsupportedVersion(msg)"},{"line_number":164,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FI20%3D","line":161,"updated":"2013-11-13 23:31:08.000000000","message":"Suggest rewording this: \"Unsupported backup metadata version: %s\"","commit_id":"3248b122b5ac18ed3863e2be7d4a79de98a23c60"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"b4cfc233e55f62bc7b33eaf2128885860f5dbfa3","unresolved":false,"context_lines":[{"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":"import json"},{"line_number":22,"context_line":"from oslo.config import cfg"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"service_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2B27s%3D","line":21,"updated":"2013-11-19 10:01:23.000000000","message":"please fix the import order by moving json, oslo a head of cinder modules.","commit_id":"c67c1f9c05d4fdd9d00a57a7c5f50c2a880a8989"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"7fda6d952816939a79ed43e88f84ad1ea660d7aa","unresolved":false,"context_lines":[{"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":"import json"},{"line_number":22,"context_line":"from oslo.config import cfg"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"service_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2BzA0%3D","line":21,"in_reply_to":"AAAATn%2F%2B0y8%3D","updated":"2013-11-20 02:49:11.000000000","message":"I mean the import order should be formatted like this: https://github.com/openstack-dev/hacking/blob/master/doc/source/index.rst#human-alphabetical-order-examples","commit_id":"c67c1f9c05d4fdd9d00a57a7c5f50c2a880a8989"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"ac1268938bced1beb56b494bddcffdaea11c6355","unresolved":false,"context_lines":[{"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":"import json"},{"line_number":22,"context_line":"from oslo.config import cfg"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"service_opts \u003d ["}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2B0y8%3D","line":21,"in_reply_to":"AAAATn%2F%2B27s%3D","updated":"2013-11-19 17:16:21.000000000","message":"Hi Huang, I\u0027m not sure what you mean. This is not currently breaking anything and it is in alphabetical order. Can you please clarify what you are asking here?","commit_id":"c67c1f9c05d4fdd9d00a57a7c5f50c2a880a8989"},{"author":{"_account_id":6604,"name":"zhangchao","email":"zhangchao010@huawei.com","username":"zhangchao010"},"change_message_id":"d9ee00bdb958c695e19919dfacac2a35ae435840","unresolved":false,"context_lines":[{"line_number":46,"context_line":""},{"line_number":47,"context_line":"        type_tag \u003d self.TYPE_TAG_VOL_META"},{"line_number":48,"context_line":"        LOG.debug(_(\"getting metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":49,"context_line":"        meta \u003d self.db.volume_metadata_get(self.context, volume_id)"},{"line_number":50,"context_line":"        if meta:"},{"line_number":51,"context_line":"            meta_container[type_tag] \u003d {}"},{"line_number":52,"context_line":"            for entry in meta:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2BzDs%3D","line":49,"updated":"2013-11-20 03:09:54.000000000","message":"Neither class base.Base nor BackupDriver has a \"context\" member.","commit_id":"c67c1f9c05d4fdd9d00a57a7c5f50c2a880a8989"},{"author":{"_account_id":6604,"name":"zhangchao","email":"zhangchao010@huawei.com","username":"zhangchao010"},"change_message_id":"d9ee00bdb958c695e19919dfacac2a35ae435840","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        type_tag \u003d self.TYPE_TAG_VOL_GLANCE_META"},{"line_number":59,"context_line":"        LOG.debug(_(\"getting metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":60,"context_line":"        try:"},{"line_number":61,"context_line":"            meta \u003d self.db.volume_glance_metadata_get(self.context, volume_id)"},{"line_number":62,"context_line":"            if meta:"},{"line_number":63,"context_line":"                meta_container[type_tag] \u003d {}"},{"line_number":64,"context_line":"                for entry in meta:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2BzDQ%3D","line":61,"updated":"2013-11-20 03:09:54.000000000","message":"ditto","commit_id":"c67c1f9c05d4fdd9d00a57a7c5f50c2a880a8989"},{"author":{"_account_id":6604,"name":"zhangchao","email":"zhangchao010@huawei.com","username":"zhangchao010"},"change_message_id":"d9ee00bdb958c695e19919dfacac2a35ae435840","unresolved":false,"context_lines":[{"line_number":69,"context_line":"        # Only backup a selection of the volume details"},{"line_number":70,"context_line":"        type_tag \u003d self.TYPE_TAG_VOL_BASE_META"},{"line_number":71,"context_line":"        LOG.debug(_(\"getting metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":72,"context_line":"        meta \u003d self.db.volume_get(self.context, volume_id)"},{"line_number":73,"context_line":"        if meta:"},{"line_number":74,"context_line":"            meta_container[type_tag] \u003d {}"},{"line_number":75,"context_line":"            keys \u003d [\u0027display_name\u0027, \u0027display_description\u0027, \u0027encryption_key_id\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2BzDM%3D","line":72,"updated":"2013-11-20 03:09:54.000000000","message":"ditto","commit_id":"c67c1f9c05d4fdd9d00a57a7c5f50c2a880a8989"},{"author":{"_account_id":6604,"name":"zhangchao","email":"zhangchao010@huawei.com","username":"zhangchao010"},"change_message_id":"d9ee00bdb958c695e19919dfacac2a35ae435840","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        type_tag \u003d self.TYPE_TAG_VOL_BASE_META"},{"line_number":86,"context_line":"        if type_tag in meta_container:"},{"line_number":87,"context_line":"            LOG.debug(_(\"restoring metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":88,"context_line":"            self.db.volume_update(self.context, volume_id,"},{"line_number":89,"context_line":"                                  meta_container[type_tag])"},{"line_number":90,"context_line":"        else:"},{"line_number":91,"context_line":"            LOG.debug(_(\"no metadata type \u0027%s\u0027 to be restored\") % type_tag)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2BzDI%3D","line":88,"updated":"2013-11-20 03:09:54.000000000","message":"ditto","commit_id":"c67c1f9c05d4fdd9d00a57a7c5f50c2a880a8989"},{"author":{"_account_id":6604,"name":"zhangchao","email":"zhangchao010@huawei.com","username":"zhangchao010"},"change_message_id":"d9ee00bdb958c695e19919dfacac2a35ae435840","unresolved":false,"context_lines":[{"line_number":93,"context_line":"        type_tag \u003d self.TYPE_TAG_VOL_META"},{"line_number":94,"context_line":"        if type_tag in meta_container:"},{"line_number":95,"context_line":"            LOG.debug(_(\"restoring metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":96,"context_line":"            self.db.volume_metadata_update(self.context, volume_id,"},{"line_number":97,"context_line":"                                           meta_container[type_tag], True)"},{"line_number":98,"context_line":"        else:"},{"line_number":99,"context_line":"            LOG.debug(_(\"no metadata type \u0027%s\u0027 to be restored\") % type_tag)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2BzDE%3D","line":96,"updated":"2013-11-20 03:09:54.000000000","message":"ditto","commit_id":"c67c1f9c05d4fdd9d00a57a7c5f50c2a880a8989"},{"author":{"_account_id":6604,"name":"zhangchao","email":"zhangchao010@huawei.com","username":"zhangchao010"},"change_message_id":"d9ee00bdb958c695e19919dfacac2a35ae435840","unresolved":false,"context_lines":[{"line_number":101,"context_line":"        type_tag \u003d self.TYPE_TAG_VOL_GLANCE_META"},{"line_number":102,"context_line":"        if type_tag in meta_container:"},{"line_number":103,"context_line":"            LOG.debug(_(\"restoring metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":104,"context_line":"            self._set_glance_metadata(self.context, volume_id,"},{"line_number":105,"context_line":"                                      meta_container[type_tag])"},{"line_number":106,"context_line":"        else:"},{"line_number":107,"context_line":"            LOG.debug(_(\"no metadata type \u0027%s\u0027 to be restored\") % type_tag)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2BzCo%3D","line":104,"updated":"2013-11-20 03:09:54.000000000","message":"ditto","commit_id":"c67c1f9c05d4fdd9d00a57a7c5f50c2a880a8989"},{"author":{"_account_id":6604,"name":"zhangchao","email":"zhangchao010@huawei.com","username":"zhangchao010"},"change_message_id":"d9ee00bdb958c695e19919dfacac2a35ae435840","unresolved":false,"context_lines":[{"line_number":117,"context_line":"            key \u003d \u0027display_name\u0027"},{"line_number":118,"context_line":"            if key in meta and meta[key] is None:"},{"line_number":119,"context_line":"                del meta[key]"},{"line_number":120,"context_line":"            self.db.volume_update(self.context, volume_id, meta)"},{"line_number":121,"context_line":"        else:"},{"line_number":122,"context_line":"            LOG.debug(_(\"no metadata type \u0027%s\u0027 to be restored\") % type_tag)"},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2BzC4%3D","line":120,"updated":"2013-11-20 03:09:54.000000000","message":"ditto","commit_id":"c67c1f9c05d4fdd9d00a57a7c5f50c2a880a8989"},{"author":{"_account_id":6604,"name":"zhangchao","email":"zhangchao010@huawei.com","username":"zhangchao010"},"change_message_id":"d9ee00bdb958c695e19919dfacac2a35ae435840","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                                                  key, value)"},{"line_number":134,"context_line":""},{"line_number":135,"context_line":"        # Now mark the volume as bootable"},{"line_number":136,"context_line":"        self.db.volume_update(self.context, volume_id,"},{"line_number":137,"context_line":"                              {\u0027bootable\u0027: True})"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def get_metadata(self, volume_id):"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2BzCs%3D","line":136,"updated":"2013-11-20 03:09:54.000000000","message":"ditto","commit_id":"c67c1f9c05d4fdd9d00a57a7c5f50c2a880a8989"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"085e66dd6763ebbaa27c78085fdad23650b85211","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from cinder.db import base"},{"line_number":21,"context_line":"from cinder import exception"},{"line_number":22,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":23,"context_line":"from oslo.config import cfg"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"service_opts \u003d ["},{"line_number":26,"context_line":"    cfg.IntOpt(\u0027backup_metadata_version\u0027, default\u003d1,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2BxBs%3D","line":23,"updated":"2013-11-20 14:49:08.000000000","message":"Imports from olso typically appear prior to imports from cinder.","commit_id":"4e3d2942376bcd0c006c40f8c2d2fdaa28d5ced1"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"3206ab1e365a64f9f4e48cb175c487419b6e6fa6","unresolved":false,"context_lines":[{"line_number":20,"context_line":"from cinder.db import base"},{"line_number":21,"context_line":"from cinder import exception"},{"line_number":22,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":23,"context_line":"from oslo.config import cfg"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"service_opts \u003d ["},{"line_number":26,"context_line":"    cfg.IntOpt(\u0027backup_metadata_version\u0027, default\u003d1,"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Bws8%3D","line":23,"in_reply_to":"AAAATn%2F%2BxBs%3D","updated":"2013-11-20 15:13:44.000000000","message":"Wouldn\u0027t that mess with the ordering? Unless I split into individual groups but I kinda think that is unnecessary.","commit_id":"4e3d2942376bcd0c006c40f8c2d2fdaa28d5ced1"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"085e66dd6763ebbaa27c78085fdad23650b85211","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def _v1_metadata_get(self, volume_id):"},{"line_number":50,"context_line":"        meta_container \u003d {\u0027version\u0027: 1}"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        type_tag \u003d self.TYPE_TAG_VOL_META"},{"line_number":53,"context_line":"        LOG.debug(_(\"getting metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":54,"context_line":"        meta \u003d self.db.volume_metadata_get(self.context, volume_id)"},{"line_number":55,"context_line":"        if meta:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2BxAw%3D","line":52,"updated":"2013-11-20 14:49:08.000000000","message":"Shouldn\u0027t this reference be \u0027BackupDriver.TYPE_TAG_VOL_META\u0027 since it\u0027s a class rather than instance attribute? Ditto on the references below.","commit_id":"4e3d2942376bcd0c006c40f8c2d2fdaa28d5ced1"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"3206ab1e365a64f9f4e48cb175c487419b6e6fa6","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def _v1_metadata_get(self, volume_id):"},{"line_number":50,"context_line":"        meta_container \u003d {\u0027version\u0027: 1}"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"        type_tag \u003d self.TYPE_TAG_VOL_META"},{"line_number":53,"context_line":"        LOG.debug(_(\"getting metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":54,"context_line":"        meta \u003d self.db.volume_metadata_get(self.context, volume_id)"},{"line_number":55,"context_line":"        if meta:"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Bwsw%3D","line":52,"in_reply_to":"AAAATn%2F%2BxAw%3D","updated":"2013-11-20 15:13:44.000000000","message":"It can bre treated as either. The only difference is that if is treated as an instance attribute, the changes are local to the instance. I could move them into the __init__ but just thought it neater to put them up top.","commit_id":"4e3d2942376bcd0c006c40f8c2d2fdaa28d5ced1"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"4ff10aa33aa32ab3268b4c40d43e8af093999289","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def _is_serializable(value):"},{"line_number":50,"context_line":"        \"\"\"Returns True if value is serializable.\"\"\""},{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            json.dumps(value)"},{"line_number":53,"context_line":"        except TypeError:"},{"line_number":54,"context_line":"            LOG.debug(_(\"value with type\u003d%s is not serializable\") %"},{"line_number":55,"context_line":"                      type(value))"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2FLBk%3D","line":52,"updated":"2014-01-16 19:03:14.000000000","message":"Using dumps/loads from jsonutils from openstack.common allow you to serialize additional types to json. You should use this instead of dumps/loads directly from json.","commit_id":"c41a1dbf8943a4fb7bf9249bd9e423fc770a2740"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"a9c861e6510282e4c63155918c480f19c48db70b","unresolved":false,"context_lines":[{"line_number":49,"context_line":"    def _is_serializable(value):"},{"line_number":50,"context_line":"        \"\"\"Returns True if value is serializable.\"\"\""},{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            json.dumps(value)"},{"line_number":53,"context_line":"        except TypeError:"},{"line_number":54,"context_line":"            LOG.debug(_(\"value with type\u003d%s is not serializable\") %"},{"line_number":55,"context_line":"                      type(value))"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BpuM%3D","line":52,"in_reply_to":"AAAAUH%2F%2FLBk%3D","updated":"2014-01-23 15:01:02.000000000","message":"Done","commit_id":"c41a1dbf8943a4fb7bf9249bd9e423fc770a2740"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"e92128e5572241cd0fb918d0ac58273b16d6e71c","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            json.dumps(value)"},{"line_number":53,"context_line":"        except TypeError:"},{"line_number":54,"context_line":"            LOG.debug(_(\"value with type\u003d%s is not serializable\") %"},{"line_number":55,"context_line":"                      type(value))"},{"line_number":56,"context_line":"            return False"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2FoB4%3D","line":54,"updated":"2014-01-13 11:32:02.000000000","message":"i18n not required for debug statements","commit_id":"c41a1dbf8943a4fb7bf9249bd9e423fc770a2740"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"a9c861e6510282e4c63155918c480f19c48db70b","unresolved":false,"context_lines":[{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            json.dumps(value)"},{"line_number":53,"context_line":"        except TypeError:"},{"line_number":54,"context_line":"            LOG.debug(_(\"value with type\u003d%s is not serializable\") %"},{"line_number":55,"context_line":"                      type(value))"},{"line_number":56,"context_line":"            return False"},{"line_number":57,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2Bpss%3D","line":54,"in_reply_to":"AAAAUH%2F%2FoB4%3D","updated":"2014-01-23 15:01:02.000000000","message":"I\u0027ve changed this to an INFO now.","commit_id":"c41a1dbf8943a4fb7bf9249bd9e423fc770a2740"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"e92128e5572241cd0fb918d0ac58273b16d6e71c","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        return True"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def _save_vol_base_meta(self, container, volume_id):"},{"line_number":61,"context_line":"        \"\"\"Fetch all fields from the Volume object and save them in the"},{"line_number":62,"context_line":"        provided container dictionary."},{"line_number":63,"context_line":"        \"\"\""},{"line_number":64,"context_line":"        type_tag \u003d self.TYPE_TAG_VOL_BASE_META"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2FoBo%3D","line":61,"updated":"2014-01-13 11:32:02.000000000","message":"multiline docstrings should start with a single line not more than 80(or 50? can\u0027t remember exactly) characters, ending with a period","commit_id":"c41a1dbf8943a4fb7bf9249bd9e423fc770a2740"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"a9c861e6510282e4c63155918c480f19c48db70b","unresolved":false,"context_lines":[{"line_number":58,"context_line":"        return True"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"    def _save_vol_base_meta(self, container, volume_id):"},{"line_number":61,"context_line":"        \"\"\"Fetch all fields from the Volume object and save them in the"},{"line_number":62,"context_line":"        provided container dictionary."},{"line_number":63,"context_line":"        \"\"\""},{"line_number":64,"context_line":"        type_tag \u003d self.TYPE_TAG_VOL_BASE_META"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2Bprs%3D","line":61,"in_reply_to":"AAAAUH%2F%2FoBo%3D","updated":"2014-01-23 15:01:02.000000000","message":"Done","commit_id":"c41a1dbf8943a4fb7bf9249bd9e423fc770a2740"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"e92128e5572241cd0fb918d0ac58273b16d6e71c","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            for key, value in meta:"},{"line_number":70,"context_line":"                # Exclude fields that are \"not JSON serializable\""},{"line_number":71,"context_line":"                if not self._is_serializable(value):"},{"line_number":72,"context_line":"                    continue"},{"line_number":73,"context_line":"                container[type_tag][key] \u003d value"},{"line_number":74,"context_line":"        else:"},{"line_number":75,"context_line":"            LOG.debug(_(\"no metadata type \u0027%s\u0027 available\") % type_tag)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2Fn88%3D","line":72,"updated":"2014-01-13 11:32:02.000000000","message":"Just a thought: should we log.debug that we\u0027re skipping the values, as we\u0027re currently giving the user no other way to know this?","commit_id":"c41a1dbf8943a4fb7bf9249bd9e423fc770a2740"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"a9c861e6510282e4c63155918c480f19c48db70b","unresolved":false,"context_lines":[{"line_number":69,"context_line":"            for key, value in meta:"},{"line_number":70,"context_line":"                # Exclude fields that are \"not JSON serializable\""},{"line_number":71,"context_line":"                if not self._is_serializable(value):"},{"line_number":72,"context_line":"                    continue"},{"line_number":73,"context_line":"                container[type_tag][key] \u003d value"},{"line_number":74,"context_line":"        else:"},{"line_number":75,"context_line":"            LOG.debug(_(\"no metadata type \u0027%s\u0027 available\") % type_tag)"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2Bpqg%3D","line":72,"in_reply_to":"AAAAUH%2F%2Fn88%3D","updated":"2014-01-23 15:01:02.000000000","message":"probably a good idea yes, i\u0027ll add that in.","commit_id":"c41a1dbf8943a4fb7bf9249bd9e423fc770a2740"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"e92128e5572241cd0fb918d0ac58273b16d6e71c","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                    continue"},{"line_number":73,"context_line":"                container[type_tag][key] \u003d value"},{"line_number":74,"context_line":"        else:"},{"line_number":75,"context_line":"            LOG.debug(_(\"no metadata type \u0027%s\u0027 available\") % type_tag)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _save_vol_meta(self, container, volume_id):"},{"line_number":78,"context_line":"        \"\"\"Fetch all fields from the VolumeMetadata object and save them in the"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2Fn8I%3D","line":75,"updated":"2014-01-13 11:32:02.000000000","message":"recommend starting with a capital letter","commit_id":"c41a1dbf8943a4fb7bf9249bd9e423fc770a2740"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"a9c861e6510282e4c63155918c480f19c48db70b","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                    continue"},{"line_number":73,"context_line":"                container[type_tag][key] \u003d value"},{"line_number":74,"context_line":"        else:"},{"line_number":75,"context_line":"            LOG.debug(_(\"no metadata type \u0027%s\u0027 available\") % type_tag)"},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"    def _save_vol_meta(self, container, volume_id):"},{"line_number":78,"context_line":"        \"\"\"Fetch all fields from the VolumeMetadata object and save them in the"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BpoE%3D","line":75,"in_reply_to":"AAAAUH%2F%2Fn8I%3D","updated":"2014-01-23 15:01:02.000000000","message":"Thanks. I corrected all messages.","commit_id":"c41a1dbf8943a4fb7bf9249bd9e423fc770a2740"},{"author":{"_account_id":7012,"name":"Brianna Poulos","email":"Brianna.Poulos@jhuapl.edu","username":"brianna-poulos"},"change_message_id":"f8d96eb708d4856433fdb9b9f8a583177d9d4086","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        \"\"\""},{"line_number":177,"context_line":"        return {self.TYPE_TAG_VOL_BASE_META:"},{"line_number":178,"context_line":"                (self._restore_vol_base_meta,"},{"line_number":179,"context_line":"                 [\u0027display_name\u0027, \u0027display_description\u0027, \u0027encryption_key_id\u0027]),"},{"line_number":180,"context_line":"                self.TYPE_TAG_VOL_META:"},{"line_number":181,"context_line":"                (self._restore_vol_meta, []),"},{"line_number":182,"context_line":"                self.TYPE_TAG_VOL_GLANCE_META:"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BuMU%3D","line":179,"updated":"2014-01-22 19:54:06.000000000","message":"The \u0027encryption_key_id\u0027 should not be included in this restore of base metadata (details provided in comments)","commit_id":"c41a1dbf8943a4fb7bf9249bd9e423fc770a2740"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"a9c861e6510282e4c63155918c480f19c48db70b","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        \"\"\""},{"line_number":177,"context_line":"        return {self.TYPE_TAG_VOL_BASE_META:"},{"line_number":178,"context_line":"                (self._restore_vol_base_meta,"},{"line_number":179,"context_line":"                 [\u0027display_name\u0027, \u0027display_description\u0027, \u0027encryption_key_id\u0027]),"},{"line_number":180,"context_line":"                self.TYPE_TAG_VOL_META:"},{"line_number":181,"context_line":"                (self._restore_vol_meta, []),"},{"line_number":182,"context_line":"                self.TYPE_TAG_VOL_GLANCE_META:"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2Bpns%3D","line":179,"in_reply_to":"AAAAUH%2F%2BuMU%3D","updated":"2014-01-23 15:01:02.000000000","message":"Brian, thanks for checking this. I\u0027ll remove that field from the list. Indeed, if there isanything else that you think should/should not be backed up please let me know,","commit_id":"c41a1dbf8943a4fb7bf9249bd9e423fc770a2740"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"4ff10aa33aa32ab3268b4c40d43e8af093999289","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        self._save_vol_glance_meta(container, volume_id)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        if container:"},{"line_number":198,"context_line":"            return json.dumps(container)"},{"line_number":199,"context_line":"        else:"},{"line_number":200,"context_line":"            return None"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2FLBA%3D","line":198,"updated":"2014-01-16 19:03:14.000000000","message":"same comment about jsonutils as above","commit_id":"c41a1dbf8943a4fb7bf9249bd9e423fc770a2740"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"a9c861e6510282e4c63155918c480f19c48db70b","unresolved":false,"context_lines":[{"line_number":195,"context_line":"        self._save_vol_glance_meta(container, volume_id)"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"        if container:"},{"line_number":198,"context_line":"            return json.dumps(container)"},{"line_number":199,"context_line":"        else:"},{"line_number":200,"context_line":"            return None"},{"line_number":201,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAAUH%2F%2BpoA%3D","line":198,"in_reply_to":"AAAAUH%2F%2FLBA%3D","updated":"2014-01-23 15:01:02.000000000","message":"Done","commit_id":"c41a1dbf8943a4fb7bf9249bd9e423fc770a2740"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"0bf05a0d6595b8bc141eccbd2438c1f6f8178b21","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        \"\"\"Returns True if value is serializable.\"\"\""},{"line_number":50,"context_line":"        try:"},{"line_number":51,"context_line":"            jsonutils.dumps(value)"},{"line_number":52,"context_line":"        except TypeError:"},{"line_number":53,"context_line":"            LOG.info(_(\"Value with type\u003d%s is not serializable\") %"},{"line_number":54,"context_line":"                     type(value))"},{"line_number":55,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BWtY%3D","line":52,"updated":"2014-01-27 19:03:40.000000000","message":"Looking at jsonutils.dumps I don\u0027t think it throws ever a TypeError exception - so this function will always return true.","commit_id":"dec962e3442a56a05ef930a72d83da6343d9f77c"},{"author":{"_account_id":4418,"name":"Ronen Kat","email":"ronenkat@il.ibm.com","username":"ronenkat"},"change_message_id":"37a86f40af865ede25681477dc03ac312b7b14ba","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        \"\"\"Returns True if value is serializable.\"\"\""},{"line_number":50,"context_line":"        try:"},{"line_number":51,"context_line":"            jsonutils.dumps(value)"},{"line_number":52,"context_line":"        except TypeError:"},{"line_number":53,"context_line":"            LOG.info(_(\"Value with type\u003d%s is not serializable\") %"},{"line_number":54,"context_line":"                     type(value))"},{"line_number":55,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BQkc%3D","line":52,"in_reply_to":"AAAAUH%2F%2BVm4%3D","updated":"2014-01-28 16:10:52.000000000","message":"ok","commit_id":"dec962e3442a56a05ef930a72d83da6343d9f77c"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"781dcf34087054c3dfc8e5f88d0b44fac6636549","unresolved":false,"context_lines":[{"line_number":49,"context_line":"        \"\"\"Returns True if value is serializable.\"\"\""},{"line_number":50,"context_line":"        try:"},{"line_number":51,"context_line":"            jsonutils.dumps(value)"},{"line_number":52,"context_line":"        except TypeError:"},{"line_number":53,"context_line":"            LOG.info(_(\"Value with type\u003d%s is not serializable\") %"},{"line_number":54,"context_line":"                     type(value))"},{"line_number":55,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BVm4%3D","line":52,"in_reply_to":"AAAAUH%2F%2BWtY%3D","updated":"2014-01-27 22:04:03.000000000","message":"Ronen, jsonutils.dumps wraps around json.dumps so I presume it will still throw a TypeError if it is unable to convert the value. I may be wrong am happy to remove this if I am but perhaps best to leave just as a precaution.","commit_id":"dec962e3442a56a05ef930a72d83da6343d9f77c"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        try:"},{"line_number":51,"context_line":"            jsonutils.dumps(value)"},{"line_number":52,"context_line":"        except TypeError:"},{"line_number":53,"context_line":"            LOG.info(_(\"Value with type\u003d%s is not serializable\") %"},{"line_number":54,"context_line":"                     type(value))"},{"line_number":55,"context_line":"            return False"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeRY%3D","line":53,"updated":"2014-02-13 00:19:09.000000000","message":"Recommend ending this with \u0027.\u0027 .","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":50,"context_line":"        try:"},{"line_number":51,"context_line":"            jsonutils.dumps(value)"},{"line_number":52,"context_line":"        except TypeError:"},{"line_number":53,"context_line":"            LOG.info(_(\"Value with type\u003d%s is not serializable\") %"},{"line_number":54,"context_line":"                     type(value))"},{"line_number":55,"context_line":"            return False"},{"line_number":56,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FbfU%3D","line":53,"in_reply_to":"AAAAUX%2F%2FeRY%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        save them in the provided container dictionary."},{"line_number":64,"context_line":"        \"\"\""},{"line_number":65,"context_line":"        type_tag \u003d self.TYPE_TAG_VOL_BASE_META"},{"line_number":66,"context_line":"        LOG.debug(_(\"Getting metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":67,"context_line":"        meta \u003d self.db.volume_get(self.context, volume_id)"},{"line_number":68,"context_line":"        if meta:"},{"line_number":69,"context_line":"            container[type_tag] \u003d {}"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeLA%3D","line":66,"updated":"2014-02-13 00:19:09.000000000","message":"Think the message would be more useful if it included the \u0027volume_id\u0027.  I.E. Getting metadata type: \u0027%s\u0027, volume: \u0027%s\u0027 .","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":63,"context_line":"        save them in the provided container dictionary."},{"line_number":64,"context_line":"        \"\"\""},{"line_number":65,"context_line":"        type_tag \u003d self.TYPE_TAG_VOL_BASE_META"},{"line_number":66,"context_line":"        LOG.debug(_(\"Getting metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":67,"context_line":"        meta \u003d self.db.volume_get(self.context, volume_id)"},{"line_number":68,"context_line":"        if meta:"},{"line_number":69,"context_line":"            container[type_tag] \u003d {}"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FbfM%3D","line":66,"in_reply_to":"AAAAUX%2F%2FeLA%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                # Exclude fields that are \"not JSON serializable\""},{"line_number":72,"context_line":"                if not self._is_serializable(value):"},{"line_number":73,"context_line":"                    LOG.info(_(\"Unable to serialize field \u0027%s\u0027 - excluding \""},{"line_number":74,"context_line":"                               \"from backup\") % (key))"},{"line_number":75,"context_line":"                    continue"},{"line_number":76,"context_line":"                container[type_tag][key] \u003d value"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeK8%3D","line":74,"updated":"2014-02-13 00:19:09.000000000","message":"Recommend ending this with \u0027.\u0027 .","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":71,"context_line":"                # Exclude fields that are \"not JSON serializable\""},{"line_number":72,"context_line":"                if not self._is_serializable(value):"},{"line_number":73,"context_line":"                    LOG.info(_(\"Unable to serialize field \u0027%s\u0027 - excluding \""},{"line_number":74,"context_line":"                               \"from backup\") % (key))"},{"line_number":75,"context_line":"                    continue"},{"line_number":76,"context_line":"                container[type_tag][key] \u003d value"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FbfI%3D","line":74,"in_reply_to":"AAAAUX%2F%2FeK8%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                    continue"},{"line_number":76,"context_line":"                container[type_tag][key] \u003d value"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"            LOG.debug(_(\"Completed fetching metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":79,"context_line":"        else:"},{"line_number":80,"context_line":"            LOG.debug(_(\"No metadata type \u0027%s\u0027 available\") % type_tag)"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeKo%3D","line":78,"updated":"2014-02-13 00:19:09.000000000","message":"Think the message would be more useful if it included the \u0027volume_id\u0027.  I.E. Completed fetching metadata type: \u0027%s\u0027, volume: \u0027%s\u0027 .","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":75,"context_line":"                    continue"},{"line_number":76,"context_line":"                container[type_tag][key] \u003d value"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"            LOG.debug(_(\"Completed fetching metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":79,"context_line":"        else:"},{"line_number":80,"context_line":"            LOG.debug(_(\"No metadata type \u0027%s\u0027 available\") % type_tag)"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FbfE%3D","line":78,"in_reply_to":"AAAAUX%2F%2FeKo%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"            LOG.debug(_(\"Completed fetching metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":79,"context_line":"        else:"},{"line_number":80,"context_line":"            LOG.debug(_(\"No metadata type \u0027%s\u0027 available\") % type_tag)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _save_vol_meta(self, container, volume_id):"},{"line_number":83,"context_line":"        \"\"\"Save volume metadata to container."}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeKg%3D","line":80,"updated":"2014-02-13 00:19:09.000000000","message":"Think the message would be more useful if it included the \u0027volume_id\u0027.  I.E.No metadata type \u0027%s\u0027 available for volume \u0027%s\u0027.","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":77,"context_line":""},{"line_number":78,"context_line":"            LOG.debug(_(\"Completed fetching metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":79,"context_line":"        else:"},{"line_number":80,"context_line":"            LOG.debug(_(\"No metadata type \u0027%s\u0027 available\") % type_tag)"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    def _save_vol_meta(self, container, volume_id):"},{"line_number":83,"context_line":"        \"\"\"Save volume metadata to container."}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FbfA%3D","line":80,"in_reply_to":"AAAAUX%2F%2FeKg%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        volume_id and save them in the provided container dictionary."},{"line_number":87,"context_line":"        \"\"\""},{"line_number":88,"context_line":"        type_tag \u003d self.TYPE_TAG_VOL_META"},{"line_number":89,"context_line":"        LOG.debug(_(\"Getting metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":90,"context_line":"        meta \u003d self.db.volume_metadata_get(self.context, volume_id)"},{"line_number":91,"context_line":"        if meta:"},{"line_number":92,"context_line":"            container[type_tag] \u003d {}"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeKc%3D","line":89,"updated":"2014-02-13 00:19:09.000000000","message":"Think the message would be more useful if it included the \u0027volume_id\u0027.  I.E. Getting metadata type: \u0027%s\u0027, volume: \u0027%s\u0027 .","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":86,"context_line":"        volume_id and save them in the provided container dictionary."},{"line_number":87,"context_line":"        \"\"\""},{"line_number":88,"context_line":"        type_tag \u003d self.TYPE_TAG_VOL_META"},{"line_number":89,"context_line":"        LOG.debug(_(\"Getting metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":90,"context_line":"        meta \u003d self.db.volume_metadata_get(self.context, volume_id)"},{"line_number":91,"context_line":"        if meta:"},{"line_number":92,"context_line":"            container[type_tag] \u003d {}"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fbe4%3D","line":89,"in_reply_to":"AAAAUX%2F%2FeKc%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                # Exclude fields that are \"not JSON serializable\""},{"line_number":95,"context_line":"                if not self._is_serializable(meta[entry]):"},{"line_number":96,"context_line":"                    LOG.info(_(\"Unable to serialize field \u0027%s\u0027 - excluding \""},{"line_number":97,"context_line":"                               \"from backup\") % (entry))"},{"line_number":98,"context_line":"                    continue"},{"line_number":99,"context_line":"                container[type_tag][entry] \u003d meta[entry]"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeKY%3D","line":97,"updated":"2014-02-13 00:19:09.000000000","message":"Recommend ending this with \u0027.\u0027 .","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":94,"context_line":"                # Exclude fields that are \"not JSON serializable\""},{"line_number":95,"context_line":"                if not self._is_serializable(meta[entry]):"},{"line_number":96,"context_line":"                    LOG.info(_(\"Unable to serialize field \u0027%s\u0027 - excluding \""},{"line_number":97,"context_line":"                               \"from backup\") % (entry))"},{"line_number":98,"context_line":"                    continue"},{"line_number":99,"context_line":"                container[type_tag][entry] \u003d meta[entry]"},{"line_number":100,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fbe0%3D","line":97,"in_reply_to":"AAAAUX%2F%2FeKY%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                    continue"},{"line_number":99,"context_line":"                container[type_tag][entry] \u003d meta[entry]"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"            LOG.debug(_(\"Completed fetching metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":102,"context_line":"        else:"},{"line_number":103,"context_line":"            LOG.debug(_(\"No metadata type \u0027%s\u0027 available\") % type_tag)"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeKM%3D","line":101,"updated":"2014-02-13 00:19:09.000000000","message":"Think the message would be more useful if it included the \u0027volume_id\u0027. I.E. Completed fetching metadata type: \u0027%s\u0027, volume: \u0027%s\u0027 .","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                    continue"},{"line_number":99,"context_line":"                container[type_tag][entry] \u003d meta[entry]"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"            LOG.debug(_(\"Completed fetching metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":102,"context_line":"        else:"},{"line_number":103,"context_line":"            LOG.debug(_(\"No metadata type \u0027%s\u0027 available\") % type_tag)"},{"line_number":104,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fbew%3D","line":101,"in_reply_to":"AAAAUX%2F%2FeKM%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"            LOG.debug(_(\"Completed fetching metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":102,"context_line":"        else:"},{"line_number":103,"context_line":"            LOG.debug(_(\"No metadata type \u0027%s\u0027 available\") % type_tag)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _save_vol_glance_meta(self, container, volume_id):"},{"line_number":106,"context_line":"        \"\"\"Save volume Glance metadata to container."}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeKI%3D","line":103,"updated":"2014-02-13 00:19:09.000000000","message":"Think the message would be more useful if it included the \u0027volume_id\u0027. I.E.No metadata type \u0027%s\u0027 available for volume \u0027%s\u0027.","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":100,"context_line":""},{"line_number":101,"context_line":"            LOG.debug(_(\"Completed fetching metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":102,"context_line":"        else:"},{"line_number":103,"context_line":"            LOG.debug(_(\"No metadata type \u0027%s\u0027 available\") % type_tag)"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def _save_vol_glance_meta(self, container, volume_id):"},{"line_number":106,"context_line":"        \"\"\"Save volume Glance metadata to container."}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fbes%3D","line":103,"in_reply_to":"AAAAUX%2F%2FeKI%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        volume_id and save them in the provided container dictionary."},{"line_number":110,"context_line":"        \"\"\""},{"line_number":111,"context_line":"        type_tag \u003d self.TYPE_TAG_VOL_GLANCE_META"},{"line_number":112,"context_line":"        LOG.debug(_(\"Getting metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":113,"context_line":"        try:"},{"line_number":114,"context_line":"            meta \u003d self.db.volume_glance_metadata_get(self.context, volume_id)"},{"line_number":115,"context_line":"            if meta:"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeKE%3D","line":112,"updated":"2014-02-13 00:19:09.000000000","message":"Same comment as above.","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        volume_id and save them in the provided container dictionary."},{"line_number":110,"context_line":"        \"\"\""},{"line_number":111,"context_line":"        type_tag \u003d self.TYPE_TAG_VOL_GLANCE_META"},{"line_number":112,"context_line":"        LOG.debug(_(\"Getting metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":113,"context_line":"        try:"},{"line_number":114,"context_line":"            meta \u003d self.db.volume_glance_metadata_get(self.context, volume_id)"},{"line_number":115,"context_line":"            if meta:"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fbeo%3D","line":112,"in_reply_to":"AAAAUX%2F%2FeKE%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                    # Exclude fields that are \"not JSON serializable\""},{"line_number":119,"context_line":"                    if not self._is_serializable(entry.value):"},{"line_number":120,"context_line":"                        LOG.info(_(\"Unable to serialize field \u0027%s\u0027 - \""},{"line_number":121,"context_line":"                                   \"excluding from backup\") % (entry))"},{"line_number":122,"context_line":"                        continue"},{"line_number":123,"context_line":"                    container[type_tag][entry.key] \u003d entry.value"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeJ8%3D","line":121,"updated":"2014-02-13 00:19:09.000000000","message":"Recommend ending this with \u0027.\u0027 .","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":118,"context_line":"                    # Exclude fields that are \"not JSON serializable\""},{"line_number":119,"context_line":"                    if not self._is_serializable(entry.value):"},{"line_number":120,"context_line":"                        LOG.info(_(\"Unable to serialize field \u0027%s\u0027 - \""},{"line_number":121,"context_line":"                                   \"excluding from backup\") % (entry))"},{"line_number":122,"context_line":"                        continue"},{"line_number":123,"context_line":"                    container[type_tag][entry.key] \u003d entry.value"},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fbek%3D","line":121,"in_reply_to":"AAAAUX%2F%2FeJ8%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                        continue"},{"line_number":123,"context_line":"                    container[type_tag][entry.key] \u003d entry.value"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"            LOG.debug(_(\"Completed fetching metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":126,"context_line":"        except exception.GlanceMetadataNotFound:"},{"line_number":127,"context_line":"            LOG.debug(_(\"No metadata type \u0027%s\u0027 available\") % type_tag)"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeJw%3D","line":125,"updated":"2014-02-13 00:19:09.000000000","message":"Same comment as above.","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":122,"context_line":"                        continue"},{"line_number":123,"context_line":"                    container[type_tag][entry.key] \u003d entry.value"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"            LOG.debug(_(\"Completed fetching metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":126,"context_line":"        except exception.GlanceMetadataNotFound:"},{"line_number":127,"context_line":"            LOG.debug(_(\"No metadata type \u0027%s\u0027 available\") % type_tag)"},{"line_number":128,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fbec%3D","line":125,"in_reply_to":"AAAAUX%2F%2FeJw%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"            LOG.debug(_(\"Completed fetching metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":126,"context_line":"        except exception.GlanceMetadataNotFound:"},{"line_number":127,"context_line":"            LOG.debug(_(\"No metadata type \u0027%s\u0027 available\") % type_tag)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    @staticmethod"},{"line_number":130,"context_line":"    def _filter(metadata, fields):"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeJs%3D","line":127,"updated":"2014-02-13 00:19:09.000000000","message":"Same comment as above.","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":124,"context_line":""},{"line_number":125,"context_line":"            LOG.debug(_(\"Completed fetching metadata type \u0027%s\u0027\") % type_tag)"},{"line_number":126,"context_line":"        except exception.GlanceMetadataNotFound:"},{"line_number":127,"context_line":"            LOG.debug(_(\"No metadata type \u0027%s\u0027 available\") % type_tag)"},{"line_number":128,"context_line":""},{"line_number":129,"context_line":"    @staticmethod"},{"line_number":130,"context_line":"    def _filter(metadata, fields):"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FbeY%3D","line":127,"in_reply_to":"AAAAUX%2F%2FeJs%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            if field in metadata:"},{"line_number":141,"context_line":"                subset[field] \u003d metadata[field]"},{"line_number":142,"context_line":"            else:"},{"line_number":143,"context_line":"                LOG.debug(_(\"Excluding field \u0027%s\u0027\") % (field))"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        return subset"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeBo%3D","line":143,"updated":"2014-02-13 00:19:09.000000000","message":"Recommend ending with a \u0027.\u0027 .","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":140,"context_line":"            if field in metadata:"},{"line_number":141,"context_line":"                subset[field] \u003d metadata[field]"},{"line_number":142,"context_line":"            else:"},{"line_number":143,"context_line":"                LOG.debug(_(\"Excluding field \u0027%s\u0027\") % (field))"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"        return subset"},{"line_number":146,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FbeE%3D","line":143,"in_reply_to":"AAAAUX%2F%2FeBo%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def _restore_vol_base_meta(self, metadata, volume_id, fields):"},{"line_number":148,"context_line":"        \"\"\"Restore values to Volume object for provided fields.\"\"\""},{"line_number":149,"context_line":"        LOG.debug(_(\"Restoring volume base metadata\"))"},{"line_number":150,"context_line":"        # Only set the display_name if it was not None since the"},{"line_number":151,"context_line":"        # restore action will have set a name which is more useful than"},{"line_number":152,"context_line":"        # None."}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeBI%3D","line":149,"updated":"2014-02-13 00:19:09.000000000","message":"Recommend including the volume_id in this message:  I.E. Restoring volume base metadata for %s.","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"    def _restore_vol_base_meta(self, metadata, volume_id, fields):"},{"line_number":148,"context_line":"        \"\"\"Restore values to Volume object for provided fields.\"\"\""},{"line_number":149,"context_line":"        LOG.debug(_(\"Restoring volume base metadata\"))"},{"line_number":150,"context_line":"        # Only set the display_name if it was not None since the"},{"line_number":151,"context_line":"        # restore action will have set a name which is more useful than"},{"line_number":152,"context_line":"        # None."}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FbeA%3D","line":149,"in_reply_to":"AAAAUX%2F%2FeBI%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _restore_vol_meta(self, metadata, volume_id, fields):"},{"line_number":161,"context_line":"        \"\"\"Restore values to VolumeMetadata object for provided fields.\"\"\""},{"line_number":162,"context_line":"        LOG.debug(_(\"Restoring volume metadata\"))"},{"line_number":163,"context_line":"        metadata \u003d self._filter(metadata, fields)"},{"line_number":164,"context_line":"        self.db.volume_metadata_update(self.context, volume_id, metadata, True)"},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeBA%3D","line":162,"updated":"2014-02-13 00:19:09.000000000","message":"Recommend including the volume_id in this message: I.E. Restoring volume metadata for %s.","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"    def _restore_vol_meta(self, metadata, volume_id, fields):"},{"line_number":161,"context_line":"        \"\"\"Restore values to VolumeMetadata object for provided fields.\"\"\""},{"line_number":162,"context_line":"        LOG.debug(_(\"Restoring volume metadata\"))"},{"line_number":163,"context_line":"        metadata \u003d self._filter(metadata, fields)"},{"line_number":164,"context_line":"        self.db.volume_metadata_update(self.context, volume_id, metadata, True)"},{"line_number":165,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fbd8%3D","line":162,"in_reply_to":"AAAAUX%2F%2FeBA%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        First delete any existing metadata then save new values."},{"line_number":170,"context_line":"        \"\"\""},{"line_number":171,"context_line":"        LOG.debug(_(\"Restoring volume glance metadata\"))"},{"line_number":172,"context_line":"        metadata \u003d self._filter(metadata, fields)"},{"line_number":173,"context_line":"        self.db.volume_glance_metadata_delete_by_volume(self.context,"},{"line_number":174,"context_line":"                                                        volume_id)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeA8%3D","line":171,"updated":"2014-02-13 00:19:09.000000000","message":"Recommend including the volume_id in this message: I.E. Restoring volume glance metadata for %s.","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        First delete any existing metadata then save new values."},{"line_number":170,"context_line":"        \"\"\""},{"line_number":171,"context_line":"        LOG.debug(_(\"Restoring volume glance metadata\"))"},{"line_number":172,"context_line":"        metadata \u003d self._filter(metadata, fields)"},{"line_number":173,"context_line":"        self.db.volume_glance_metadata_delete_by_volume(self.context,"},{"line_number":174,"context_line":"                                                        volume_id)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fbd4%3D","line":171,"in_reply_to":"AAAAUX%2F%2FeA8%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            if type in meta_container:"},{"line_number":236,"context_line":"                func(meta_container[type], volume_id, fields)"},{"line_number":237,"context_line":"            else:"},{"line_number":238,"context_line":"                msg \u003d _(\"No metadata of type \u0027%s\u0027 to restore\") % (type)"},{"line_number":239,"context_line":"                LOG.debug(msg)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeAQ%3D","line":238,"updated":"2014-02-13 00:19:09.000000000","message":"Recommend including the volume_id here too.","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":235,"context_line":"            if type in meta_container:"},{"line_number":236,"context_line":"                func(meta_container[type], volume_id, fields)"},{"line_number":237,"context_line":"            else:"},{"line_number":238,"context_line":"                msg \u003d _(\"No metadata of type \u0027%s\u0027 to restore\") % (type)"},{"line_number":239,"context_line":"                LOG.debug(msg)"},{"line_number":240,"context_line":""},{"line_number":241,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fbdw%3D","line":238,"in_reply_to":"AAAAUX%2F%2FeAQ%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"}],"cinder/backup/drivers/ceph.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"286c27bc3ccf26e6e3597ba0879e94134e8be3f2","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    def remove(self, name):"},{"line_number":138,"context_line":"        meta_obj \u003d self.rados.Object(self._client.ioctx, self.name)"},{"line_number":139,"context_line":"        if not self._exists(meta_obj):"},{"line_number":140,"context_line":"            LOG.info(\"meta object %s does not exist\" % (name))"},{"line_number":141,"context_line":"            return"},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"        meta_obj.remove()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FeAo%3D","line":140,"updated":"2013-10-15 19:29:49.000000000","message":"_()","commit_id":"023fdc1bdafb922681f0d87e32af3e672de1a8f9"},{"author":{"_account_id":4523,"name":"Eric Harney","email":"eharney@redhat.com","username":"eharney"},"change_message_id":"fc4dfcfb8045ce9875fc0940f0c46fd19a64707a","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        self._ceph_backup_conf \u003d self.utf8(CONF.backup_ceph_conf)"},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"    @staticmethod"},{"line_number":180,"context_line":"    def utf8(s):"},{"line_number":181,"context_line":"        \"\"\"Ensure string s is utf8 (i.e. not unicode).\"\"\""},{"line_number":182,"context_line":"        if isinstance(s, str):"},{"line_number":183,"context_line":"            return s"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FeTc%3D","line":180,"updated":"2013-10-15 18:34:14.000000000","message":"This should probably be replaced with openstack.common.strutils.safe_encode()?","commit_id":"023fdc1bdafb922681f0d87e32af3e672de1a8f9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"286c27bc3ccf26e6e3597ba0879e94134e8be3f2","unresolved":false,"context_lines":[{"line_number":779,"context_line":"                    volume_meta[entry.key] \u003d entry.value"},{"line_number":780,"context_line":""},{"line_number":781,"context_line":"        if volume_meta:"},{"line_number":782,"context_line":"            LOG.debug(\"backing up volume metadata\")"},{"line_number":783,"context_line":"            with rbd_driver.RADOSClient(self) as client:"},{"line_number":784,"context_line":"                VolumeMetadataBackup(client, backup[\u0027id\u0027]).add(volume_meta)"},{"line_number":785,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FeBA%3D","line":782,"updated":"2013-10-15 19:29:49.000000000","message":"Should use _() here.","commit_id":"023fdc1bdafb922681f0d87e32af3e672de1a8f9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"286c27bc3ccf26e6e3597ba0879e94134e8be3f2","unresolved":false,"context_lines":[{"line_number":1055,"context_line":"        with rbd_driver.RADOSClient(self) as client:"},{"line_number":1056,"context_line":"            meta_bak \u003d VolumeMetadataBackup(client, backup[\u0027id\u0027])"},{"line_number":1057,"context_line":"            if not meta_bak.exists:"},{"line_number":1058,"context_line":"                LOG.debug(\"volume has no metadata to restore\")"},{"line_number":1059,"context_line":"                return"},{"line_number":1060,"context_line":""},{"line_number":1061,"context_line":"            metadata \u003d VolumeMetadataBackup(client, backup[\u0027id\u0027]).get()"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FeA4%3D","line":1058,"updated":"2013-10-15 19:29:49.000000000","message":"_()","commit_id":"023fdc1bdafb922681f0d87e32af3e672de1a8f9"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"286c27bc3ccf26e6e3597ba0879e94134e8be3f2","unresolved":false,"context_lines":[{"line_number":1060,"context_line":""},{"line_number":1061,"context_line":"            metadata \u003d VolumeMetadataBackup(client, backup[\u0027id\u0027]).get()"},{"line_number":1062,"context_line":""},{"line_number":1063,"context_line":"        LOG.debug(\"restoring volume metadata\")"},{"line_number":1064,"context_line":"        for (key, value) in metadata.items():"},{"line_number":1065,"context_line":"            try:"},{"line_number":1066,"context_line":"                self.db.volume_glance_metadata_create(self.context,"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FeAw%3D","line":1063,"updated":"2013-10-15 19:29:49.000000000","message":"_()","commit_id":"023fdc1bdafb922681f0d87e32af3e672de1a8f9"},{"author":{"_account_id":6506,"name":"Anastasia Guzikova","email":"aguzikova@mirantis.com","username":"aguzikova"},"change_message_id":"ec0315f94c0086390438db5225ee9bb45eb8264f","unresolved":false,"context_lines":[{"line_number":41,"context_line":"restore to a new volume (default)."},{"line_number":42,"context_line":"\"\"\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"import eventlet"},{"line_number":45,"context_line":"import fcntl"},{"line_number":46,"context_line":"import os"},{"line_number":47,"context_line":"import re"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2Fjk0%3D","line":44,"updated":"2013-11-01 12:56:45.000000000","message":"why has this import been relocated?","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":6506,"name":"Anastasia Guzikova","email":"aguzikova@mirantis.com","username":"aguzikova"},"change_message_id":"1c813084371387927bbb6dd5f220824ce8f74d3e","unresolved":false,"context_lines":[{"line_number":41,"context_line":"restore to a new volume (default)."},{"line_number":42,"context_line":"\"\"\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"import eventlet"},{"line_number":45,"context_line":"import fcntl"},{"line_number":46,"context_line":"import os"},{"line_number":47,"context_line":"import re"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FjCo%3D","line":44,"in_reply_to":"AAAATn%2F%2FjOM%3D","updated":"2013-11-01 15:32:16.000000000","message":"Done","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"f91e9527b3250dbac042709cf88637d874a5f32c","unresolved":false,"context_lines":[{"line_number":41,"context_line":"restore to a new volume (default)."},{"line_number":42,"context_line":"\"\"\""},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"import eventlet"},{"line_number":45,"context_line":"import fcntl"},{"line_number":46,"context_line":"import os"},{"line_number":47,"context_line":"import re"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FjOM%3D","line":44,"in_reply_to":"AAAATn%2F%2Fjk0%3D","updated":"2013-11-01 14:53:36.000000000","message":"because if imports can be grouped i think that is better than placing them randomly and separating them with a newline.","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"af32914fc534c42b928bb8a89884013fea91fdb6","unresolved":false,"context_lines":[{"line_number":784,"context_line":"    def _backup_metadata(self, backup):"},{"line_number":785,"context_line":"        \"\"\"Backup volume and Glance metadata."},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"        NOTE(dosaboy): should we backup/restore admin metadata too?"},{"line_number":788,"context_line":"        \"\"\""},{"line_number":789,"context_line":"        json_meta \u003d self.get_metadata(backup[\u0027volume_id\u0027])"},{"line_number":790,"context_line":"        if not json_meta:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FT%2BA%3D","line":787,"updated":"2013-11-11 07:03:07.000000000","message":"Like I wrote in the other file, maybe.  I wouldn\u0027t copy all of it because it\u0027s not meant to be use-visible, but maybe make read_only a special case and save that attribute in the backup.","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"dad0c2c331b1e3a719ba611a5bc41380b8b6f1e6","unresolved":false,"context_lines":[{"line_number":784,"context_line":"    def _backup_metadata(self, backup):"},{"line_number":785,"context_line":"        \"\"\"Backup volume and Glance metadata."},{"line_number":786,"context_line":""},{"line_number":787,"context_line":"        NOTE(dosaboy): should we backup/restore admin metadata too?"},{"line_number":788,"context_line":"        \"\"\""},{"line_number":789,"context_line":"        json_meta \u003d self.get_metadata(backup[\u0027volume_id\u0027])"},{"line_number":790,"context_line":"        if not json_meta:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FTpM%3D","line":787,"in_reply_to":"AAAATn%2F%2FT%2BA%3D","updated":"2013-11-11 09:55:56.000000000","message":"Agreed. I will resolve this in driver.py.","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4084f046fe734152a074e43952e8362f65fadc7a","unresolved":false,"context_lines":[{"line_number":118,"context_line":"    def set(self, json_meta):"},{"line_number":119,"context_line":"        meta_obj \u003d self.rados.Object(self._client.ioctx, self.name)"},{"line_number":120,"context_line":"        if self._exists(meta_obj):"},{"line_number":121,"context_line":"            msg \u003d _(\"meta object base %s already exists\") % (self.name)"},{"line_number":122,"context_line":"            raise exception.VolumeMetadataBackupExists(msg)"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"        meta_obj.write(json_meta)"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FI2Q%3D","line":121,"updated":"2013-11-13 23:31:08.000000000","message":"Suggest:  \"Meta object base %s already exists.\"","commit_id":"3248b122b5ac18ed3863e2be7d4a79de98a23c60"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4084f046fe734152a074e43952e8362f65fadc7a","unresolved":false,"context_lines":[{"line_number":126,"context_line":"    def get(self):"},{"line_number":127,"context_line":"        meta_obj \u003d self.rados.Object(self._client.ioctx, self.name)"},{"line_number":128,"context_line":"        if not self._exists(meta_obj):"},{"line_number":129,"context_line":"            msg \u003d _(\"meta object base %s does not exist\") % (self.name)"},{"line_number":130,"context_line":"            LOG.debug(msg)"},{"line_number":131,"context_line":"            return None"},{"line_number":132,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FI2I%3D","line":129,"updated":"2013-11-13 23:31:08.000000000","message":"Suggest:  \"Meta object base %s does not exist.\"","commit_id":"3248b122b5ac18ed3863e2be7d4a79de98a23c60"},{"author":{"_account_id":8574,"name":"Qin Zhao","username":"zhaoqin","inactive":true},"change_message_id":"e72061b1a78ccea46db104e7e6911caf2034143e","unresolved":false,"context_lines":[{"line_number":138,"context_line":"            meta_obj.remove()"},{"line_number":139,"context_line":"        except self.rados.ObjectNotFound:"},{"line_number":140,"context_line":"            if ignore_missing:"},{"line_number":141,"context_line":"                LOG.debug(\"metadata backup object not found - ignoring\")"},{"line_number":142,"context_line":"            else:"},{"line_number":143,"context_line":"                raise"},{"line_number":144,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FHrs%3D","line":141,"updated":"2013-11-14 07:18:19.000000000","message":"Same as Jay\u0027s suggestion: metadata --\u003e Meta","commit_id":"3248b122b5ac18ed3863e2be7d4a79de98a23c60"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4084f046fe734152a074e43952e8362f65fadc7a","unresolved":false,"context_lines":[{"line_number":844,"context_line":"                              {\u0027container\u0027: self._ceph_backup_pool})"},{"line_number":845,"context_line":""},{"line_number":846,"context_line":"        if backup_metadata:"},{"line_number":847,"context_line":"            self._backup_metadata(backup)"},{"line_number":848,"context_line":""},{"line_number":849,"context_line":"        LOG.debug(_(\"backup \u0027%s\u0027 finished.\") % (backup_id))"},{"line_number":850,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FIyc%3D","line":847,"updated":"2013-11-13 23:31:08.000000000","message":"What is going to happen if we hit an exception in the metadata backup?  I am not seeing anywhere that the BackupMetadataUnsupportedVersion exception is handled.","commit_id":"3248b122b5ac18ed3863e2be7d4a79de98a23c60"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4084f046fe734152a074e43952e8362f65fadc7a","unresolved":false,"context_lines":[{"line_number":1097,"context_line":"            else:"},{"line_number":1098,"context_line":"                os.fsync(fileno)"},{"line_number":1099,"context_line":""},{"line_number":1100,"context_line":"            self._restore_metadata(backup, volume_id)"},{"line_number":1101,"context_line":""},{"line_number":1102,"context_line":"            LOG.debug(_(\u0027restore finished successfully.\u0027))"},{"line_number":1103,"context_line":"        except exception.BackupOperationError as e:"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FIxU%3D","line":1100,"updated":"2013-11-13 23:31:08.000000000","message":"Same comment about the exception handling.","commit_id":"3248b122b5ac18ed3863e2be7d4a79de98a23c60"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"085e66dd6763ebbaa27c78085fdad23650b85211","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @property"},{"line_number":105,"context_line":"    def exists(self):"},{"line_number":106,"context_line":"        meta_obj \u003d self.rados.Object(self._client.ioctx, self.name)"},{"line_number":107,"context_line":"        return self._exists(meta_obj)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def _exists(self, obj):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Bw9w%3D","line":106,"updated":"2013-11-20 14:49:08.000000000","message":"If self.rados is None (due to an ImportError), this statement will raise an AttributeError. (Ditto to the references to self.rados below.) Is this error handled / avoided somewhere?","commit_id":"4e3d2942376bcd0c006c40f8c2d2fdaa28d5ced1"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"3206ab1e365a64f9f4e48cb175c487419b6e6fa6","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    @property"},{"line_number":105,"context_line":"    def exists(self):"},{"line_number":106,"context_line":"        meta_obj \u003d self.rados.Object(self._client.ioctx, self.name)"},{"line_number":107,"context_line":"        return self._exists(meta_obj)"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def _exists(self, obj):"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Bwt0%3D","line":106,"in_reply_to":"AAAATn%2F%2Bw9w%3D","updated":"2013-11-20 15:13:44.000000000","message":"If the module is not imported then the Ceph backup driver will not work at all. This is true for all the backup drivers i.e. if their dependencies don\u0027t exist they will fail pretty quickly. It might be nice to add some extra protection around this case so that the user can be notifed early on that this is the case. Since this would apply to all drivers I suggest creating a new bug/bp for it so that it can be dealt with separately.","commit_id":"4e3d2942376bcd0c006c40f8c2d2fdaa28d5ced1"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"085e66dd6763ebbaa27c78085fdad23650b85211","unresolved":false,"context_lines":[{"line_number":166,"context_line":"            self.rbd_stripe_unit \u003d CONF.backup_ceph_stripe_unit"},{"line_number":167,"context_line":"            self.rbd_stripe_count \u003d CONF.backup_ceph_stripe_count"},{"line_number":168,"context_line":"        else:"},{"line_number":169,"context_line":"            LOG.info(_(\"RBD striping not supported - ignoring configuration \""},{"line_number":170,"context_line":"                       \"settings for rbd striping\"))"},{"line_number":171,"context_line":"            self.rbd_stripe_count \u003d 0"},{"line_number":172,"context_line":"            self.rbd_stripe_unit \u003d 0"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Bw5k%3D","line":169,"updated":"2013-11-20 14:49:08.000000000","message":"I applaud cleaning up these messages (many changes below), but it seems like these changes should be split out into a separate commit (https://wiki.openstack.org/wiki/GitCommitMessages#Structural_split_of_changes).","commit_id":"4e3d2942376bcd0c006c40f8c2d2fdaa28d5ced1"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"3206ab1e365a64f9f4e48cb175c487419b6e6fa6","unresolved":false,"context_lines":[{"line_number":166,"context_line":"            self.rbd_stripe_unit \u003d CONF.backup_ceph_stripe_unit"},{"line_number":167,"context_line":"            self.rbd_stripe_count \u003d CONF.backup_ceph_stripe_count"},{"line_number":168,"context_line":"        else:"},{"line_number":169,"context_line":"            LOG.info(_(\"RBD striping not supported - ignoring configuration \""},{"line_number":170,"context_line":"                       \"settings for rbd striping\"))"},{"line_number":171,"context_line":"            self.rbd_stripe_count \u003d 0"},{"line_number":172,"context_line":"            self.rbd_stripe_unit \u003d 0"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Bwtc%3D","line":169,"in_reply_to":"AAAATn%2F%2Bw5k%3D","updated":"2013-11-20 15:13:44.000000000","message":"This was requested in a previous patchset review..","commit_id":"4e3d2942376bcd0c006c40f8c2d2fdaa28d5ced1"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"085e66dd6763ebbaa27c78085fdad23650b85211","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        self._ceph_backup_user \u003d strutils.safe_encode(CONF.backup_ceph_user)"},{"line_number":175,"context_line":"        self._ceph_backup_pool \u003d strutils.safe_encode(CONF.backup_ceph_pool)"},{"line_number":176,"context_line":"        self._ceph_backup_conf \u003d strutils.safe_encode(CONF.backup_ceph_conf)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def _validate_string_args(self, *args):"},{"line_number":179,"context_line":"        \"\"\"Ensure all args are non-None and non-empty.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Bw6s%3D","line":176,"updated":"2013-11-20 14:49:08.000000000","message":"Is the replacement of self._utf8(...) with strutils.safe_encode(...) specifically related to backups? If not, perhaps it would be better to split these changes into a separate patch?","commit_id":"4e3d2942376bcd0c006c40f8c2d2fdaa28d5ced1"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"3206ab1e365a64f9f4e48cb175c487419b6e6fa6","unresolved":false,"context_lines":[{"line_number":173,"context_line":""},{"line_number":174,"context_line":"        self._ceph_backup_user \u003d strutils.safe_encode(CONF.backup_ceph_user)"},{"line_number":175,"context_line":"        self._ceph_backup_pool \u003d strutils.safe_encode(CONF.backup_ceph_pool)"},{"line_number":176,"context_line":"        self._ceph_backup_conf \u003d strutils.safe_encode(CONF.backup_ceph_conf)"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":"    def _validate_string_args(self, *args):"},{"line_number":179,"context_line":"        \"\"\"Ensure all args are non-None and non-empty.\"\"\""}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2BwtQ%3D","line":176,"in_reply_to":"AAAATn%2F%2Bw6s%3D","updated":"2013-11-20 15:13:44.000000000","message":"This also was requested in a previous patchset review.","commit_id":"4e3d2942376bcd0c006c40f8c2d2fdaa28d5ced1"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        \"\"\""},{"line_number":134,"context_line":"        meta_obj \u003d rados.Object(self._client.ioctx, self.name)"},{"line_number":135,"context_line":"        if not self._exists(meta_obj):"},{"line_number":136,"context_line":"            msg \u003d _(\"Metadata backup object %s does not exist\") % (self.name)"},{"line_number":137,"context_line":"            LOG.debug(msg)"},{"line_number":138,"context_line":"            return None"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FeAA%3D","line":136,"updated":"2014-02-13 00:19:09.000000000","message":"Recommend ending this with a \u0027.\u0027 .","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        \"\"\""},{"line_number":134,"context_line":"        meta_obj \u003d rados.Object(self._client.ioctx, self.name)"},{"line_number":135,"context_line":"        if not self._exists(meta_obj):"},{"line_number":136,"context_line":"            msg \u003d _(\"Metadata backup object %s does not exist\") % (self.name)"},{"line_number":137,"context_line":"            LOG.debug(msg)"},{"line_number":138,"context_line":"            return None"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fbgw%3D","line":136,"in_reply_to":"AAAAUX%2F%2FeAA%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        try:"},{"line_number":145,"context_line":"            meta_obj.remove()"},{"line_number":146,"context_line":"        except rados.ObjectNotFound:"},{"line_number":147,"context_line":"            msg \u003d (_(\"Metadata backup object \u0027%s\u0027 not found - ignoring\") %"},{"line_number":148,"context_line":"                   (self.name))"},{"line_number":149,"context_line":"            LOG.debug(msg)"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fd%2Fs%3D","line":147,"updated":"2014-02-13 00:19:09.000000000","message":"Recommend ending with a \u0027.\u0027 .","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        try:"},{"line_number":145,"context_line":"            meta_obj.remove()"},{"line_number":146,"context_line":"        except rados.ObjectNotFound:"},{"line_number":147,"context_line":"            msg \u003d (_(\"Metadata backup object \u0027%s\u0027 not found - ignoring\") %"},{"line_number":148,"context_line":"                   (self.name))"},{"line_number":149,"context_line":"            LOG.debug(msg)"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fbgk%3D","line":147,"in_reply_to":"AAAAUX%2F%2Fd%2Fs%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":806,"context_line":"        \"\"\""},{"line_number":807,"context_line":"        json_meta \u003d self.get_metadata(backup[\u0027volume_id\u0027])"},{"line_number":808,"context_line":"        if not json_meta:"},{"line_number":809,"context_line":"            LOG.debug(\"No volume metadata to backup\")"},{"line_number":810,"context_line":"            return"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"        LOG.debug(\"Backing up metadata\")"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fd%2B8%3D","line":809,"updated":"2014-02-13 00:19:09.000000000","message":"End with \u0027.\u0027 .","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":806,"context_line":"        \"\"\""},{"line_number":807,"context_line":"        json_meta \u003d self.get_metadata(backup[\u0027volume_id\u0027])"},{"line_number":808,"context_line":"        if not json_meta:"},{"line_number":809,"context_line":"            LOG.debug(\"No volume metadata to backup\")"},{"line_number":810,"context_line":"            return"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"        LOG.debug(\"Backing up metadata\")"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FbgY%3D","line":809,"in_reply_to":"AAAAUX%2F%2Fd%2B8%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":809,"context_line":"            LOG.debug(\"No volume metadata to backup\")"},{"line_number":810,"context_line":"            return"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"        LOG.debug(\"Backing up metadata\")"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"        try:"},{"line_number":815,"context_line":"            with rbd_driver.RADOSClient(self) as client:"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fd%2Bg%3D","line":812,"updated":"2014-02-13 00:19:09.000000000","message":"End with \u0027.\u0027 .","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":809,"context_line":"            LOG.debug(\"No volume metadata to backup\")"},{"line_number":810,"context_line":"            return"},{"line_number":811,"context_line":""},{"line_number":812,"context_line":"        LOG.debug(\"Backing up metadata\")"},{"line_number":813,"context_line":""},{"line_number":814,"context_line":"        try:"},{"line_number":815,"context_line":"            with rbd_driver.RADOSClient(self) as client:"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FbgQ%3D","line":812,"in_reply_to":"AAAAUX%2F%2Fd%2Bg%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":816,"context_line":"                vol_meta_backup \u003d VolumeMetadataBackup(client, backup[\u0027id\u0027])"},{"line_number":817,"context_line":"                vol_meta_backup.set(json_meta)"},{"line_number":818,"context_line":"        except exception.VolumeMetadataBackupExists as e:"},{"line_number":819,"context_line":"            msg \u003d _(\"Failed to backup metadata - %s\") % (str(e))"},{"line_number":820,"context_line":"            raise exception.BackupOperationError(msg)"},{"line_number":821,"context_line":"        except exception.BackupMetadataUnsupportedVersion:"},{"line_number":822,"context_line":"            LOG.error(\"Failed to backup volume metadata due to \""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fd%2BI%3D","line":819,"updated":"2014-02-13 00:19:09.000000000","message":"End with \u0027.\u0027.  Also, should use six.text_type(e) instead of str(e) as it can cause exceptions in the i18n code.","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":816,"context_line":"                vol_meta_backup \u003d VolumeMetadataBackup(client, backup[\u0027id\u0027])"},{"line_number":817,"context_line":"                vol_meta_backup.set(json_meta)"},{"line_number":818,"context_line":"        except exception.VolumeMetadataBackupExists as e:"},{"line_number":819,"context_line":"            msg \u003d _(\"Failed to backup metadata - %s\") % (str(e))"},{"line_number":820,"context_line":"            raise exception.BackupOperationError(msg)"},{"line_number":821,"context_line":"        except exception.BackupMetadataUnsupportedVersion:"},{"line_number":822,"context_line":"            LOG.error(\"Failed to backup volume metadata due to \""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FbgM%3D","line":819,"in_reply_to":"AAAAUX%2F%2Fd%2BI%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":820,"context_line":"            raise exception.BackupOperationError(msg)"},{"line_number":821,"context_line":"        except exception.BackupMetadataUnsupportedVersion:"},{"line_number":822,"context_line":"            LOG.error(\"Failed to backup volume metadata due to \""},{"line_number":823,"context_line":"                      \"incompatible version\")"},{"line_number":824,"context_line":"            msg \u003d _(\"Backup failed due to incompatible metadata version\")"},{"line_number":825,"context_line":"            # Remove backup volume."},{"line_number":826,"context_line":"            self.delete(backup)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fd94%3D","line":823,"updated":"2014-02-13 00:19:09.000000000","message":"End with \u0027.\u0027 .","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":820,"context_line":"            raise exception.BackupOperationError(msg)"},{"line_number":821,"context_line":"        except exception.BackupMetadataUnsupportedVersion:"},{"line_number":822,"context_line":"            LOG.error(\"Failed to backup volume metadata due to \""},{"line_number":823,"context_line":"                      \"incompatible version\")"},{"line_number":824,"context_line":"            msg \u003d _(\"Backup failed due to incompatible metadata version\")"},{"line_number":825,"context_line":"            # Remove backup volume."},{"line_number":826,"context_line":"            self.delete(backup)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2FbgE%3D","line":823,"in_reply_to":"AAAAUX%2F%2Fd94%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":1105,"context_line":"                if meta is not None:"},{"line_number":1106,"context_line":"                    self.put_metadata(volume_id, meta)"},{"line_number":1107,"context_line":"                else:"},{"line_number":1108,"context_line":"                    LOG.debug(_(\"Volume has no backed up metadata\"))"},{"line_number":1109,"context_line":"        except exception.BackupMetadataUnsupportedVersion:"},{"line_number":1110,"context_line":"            msg \u003d _(\"Metadata restore failed due to incompatible version\")"},{"line_number":1111,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fd9k%3D","line":1108,"updated":"2014-02-13 00:19:09.000000000","message":"Recommend including the volume_id.  End with \u0027.\u0027 .","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":1105,"context_line":"                if meta is not None:"},{"line_number":1106,"context_line":"                    self.put_metadata(volume_id, meta)"},{"line_number":1107,"context_line":"                else:"},{"line_number":1108,"context_line":"                    LOG.debug(_(\"Volume has no backed up metadata\"))"},{"line_number":1109,"context_line":"        except exception.BackupMetadataUnsupportedVersion:"},{"line_number":1110,"context_line":"            msg \u003d _(\"Metadata restore failed due to incompatible version\")"},{"line_number":1111,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fbf4%3D","line":1108,"in_reply_to":"AAAAUX%2F%2Fd9k%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"c32eeac3a63d7138024c65c851e30c3458697439","unresolved":false,"context_lines":[{"line_number":1107,"context_line":"                else:"},{"line_number":1108,"context_line":"                    LOG.debug(_(\"Volume has no backed up metadata\"))"},{"line_number":1109,"context_line":"        except exception.BackupMetadataUnsupportedVersion:"},{"line_number":1110,"context_line":"            msg \u003d _(\"Metadata restore failed due to incompatible version\")"},{"line_number":1111,"context_line":"            LOG.error(msg)"},{"line_number":1112,"context_line":"            raise exception.BackupOperationError(msg)"},{"line_number":1113,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fd9U%3D","line":1110,"updated":"2014-02-13 00:19:09.000000000","message":"Recommend ending with \u0027.\u0027.","commit_id":"659d60d6a888030b2fde0302739943af186544f3"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"56d6f93ac1518105b6b2de131ea4c1d4796594c2","unresolved":false,"context_lines":[{"line_number":1107,"context_line":"                else:"},{"line_number":1108,"context_line":"                    LOG.debug(_(\"Volume has no backed up metadata\"))"},{"line_number":1109,"context_line":"        except exception.BackupMetadataUnsupportedVersion:"},{"line_number":1110,"context_line":"            msg \u003d _(\"Metadata restore failed due to incompatible version\")"},{"line_number":1111,"context_line":"            LOG.error(msg)"},{"line_number":1112,"context_line":"            raise exception.BackupOperationError(msg)"},{"line_number":1113,"context_line":""}],"source_content_type":"text/x-python","patch_set":20,"id":"AAAAUX%2F%2Fbf0%3D","line":1110,"in_reply_to":"AAAAUX%2F%2Fd9U%3D","updated":"2014-02-13 09:14:42.000000000","message":"see https://bugs.launchpad.net/cinder/+bug/1279703","commit_id":"659d60d6a888030b2fde0302739943af186544f3"}],"cinder/backup/drivers/swift.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"286c27bc3ccf26e6e3597ba0879e94134e8be3f2","unresolved":false,"context_lines":[{"line_number":330,"context_line":"        \"\"\"Backup the given volume to swift using the given backup metadata.\"\"\""},{"line_number":331,"context_line":""},{"line_number":332,"context_line":"        if backup_metadata:"},{"line_number":333,"context_line":"            LOG.error(\"metadata backup not supported\")"},{"line_number":334,"context_line":""},{"line_number":335,"context_line":"        object_meta, container \u003d self._prepare_backup(backup)"},{"line_number":336,"context_line":"        while True:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FeAk%3D","line":333,"updated":"2013-10-15 19:29:49.000000000","message":"_()","commit_id":"023fdc1bdafb922681f0d87e32af3e672de1a8f9"},{"author":{"_account_id":6506,"name":"Anastasia Guzikova","email":"aguzikova@mirantis.com","username":"aguzikova"},"change_message_id":"ec0315f94c0086390438db5225ee9bb45eb8264f","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        # TODO(dosaboy): this needs to be implemented"},{"line_number":334,"context_line":"        if backup_metadata:"},{"line_number":335,"context_line":"            LOG.error(\"metadata backup not supported\")"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        object_meta, container \u003d self._prepare_backup(backup)"},{"line_number":338,"context_line":"        while True:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FjkY%3D","line":335,"updated":"2013-11-01 12:56:45.000000000","message":"shouldn\u0027t there \u0027warning\u0027 be here? or if it\u0027s an error shouldn\u0027t we raise the exception?","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":6506,"name":"Anastasia Guzikova","email":"aguzikova@mirantis.com","username":"aguzikova"},"change_message_id":"1c813084371387927bbb6dd5f220824ce8f74d3e","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        # TODO(dosaboy): this needs to be implemented"},{"line_number":334,"context_line":"        if backup_metadata:"},{"line_number":335,"context_line":"            LOG.error(\"metadata backup not supported\")"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        object_meta, container \u003d self._prepare_backup(backup)"},{"line_number":338,"context_line":"        while True:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FjCk%3D","line":335,"in_reply_to":"AAAATn%2F%2FjNU%3D","updated":"2013-11-01 15:32:16.000000000","message":"Done","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"f91e9527b3250dbac042709cf88637d874a5f32c","unresolved":false,"context_lines":[{"line_number":332,"context_line":""},{"line_number":333,"context_line":"        # TODO(dosaboy): this needs to be implemented"},{"line_number":334,"context_line":"        if backup_metadata:"},{"line_number":335,"context_line":"            LOG.error(\"metadata backup not supported\")"},{"line_number":336,"context_line":""},{"line_number":337,"context_line":"        object_meta, container \u003d self._prepare_backup(backup)"},{"line_number":338,"context_line":"        while True:"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FjNU%3D","line":335,"in_reply_to":"AAAATn%2F%2FjkY%3D","updated":"2013-11-01 14:53:36.000000000","message":"Not sure what is best here but my thinking for the moment is this; we are adding in new functionality that we want all drivers to adopt a.s.a.p. and the implemetations are being done as part of independent commits as per https://blueprints.launchpad.net/cinder/+spec/cinder-backup-volume-metadata-support. I think that raising an exception here may be better here since we want people to be absolutely aware that if they expect metadata to be backed up, that is not what will happen. If/once this patchset gets merged hopefully the remaining drivers will follow suite quickly.","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"b4cfc233e55f62bc7b33eaf2128885860f5dbfa3","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        if backup_metadata:"},{"line_number":335,"context_line":"            msg \u003d _(\"This driver does not support backing up volume metadata \""},{"line_number":336,"context_line":"                    \"but has been asked to do so.\")"},{"line_number":337,"context_line":"            raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        object_meta, container \u003d self._prepare_backup(backup)"},{"line_number":340,"context_line":"        while True:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2B22I%3D","line":337,"updated":"2013-11-19 10:01:23.000000000","message":"should this be NotImplementedError() instead?","commit_id":"c67c1f9c05d4fdd9d00a57a7c5f50c2a880a8989"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"ac1268938bced1beb56b494bddcffdaea11c6355","unresolved":false,"context_lines":[{"line_number":334,"context_line":"        if backup_metadata:"},{"line_number":335,"context_line":"            msg \u003d _(\"This driver does not support backing up volume metadata \""},{"line_number":336,"context_line":"                    \"but has been asked to do so.\")"},{"line_number":337,"context_line":"            raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":338,"context_line":""},{"line_number":339,"context_line":"        object_meta, container \u003d self._prepare_backup(backup)"},{"line_number":340,"context_line":"        while True:"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2B0ys%3D","line":337,"in_reply_to":"AAAATn%2F%2B22I%3D","updated":"2013-11-19 17:16:21.000000000","message":"I don\u0027t think so. NotImplementedError is normally for Base classes. I know this is not ideal but the idea is that each driver will get its own implementation as soon as this patchset lands so these exceptions *should* be around for long.","commit_id":"c67c1f9c05d4fdd9d00a57a7c5f50c2a880a8989"}],"cinder/backup/drivers/tsm.py":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"286c27bc3ccf26e6e3597ba0879e94134e8be3f2","unresolved":false,"context_lines":[{"line_number":280,"context_line":"        \"\"\""},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        if backup_metadata:"},{"line_number":283,"context_line":"            LOG.error(\"metadata backup not supported\")"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"        backup_id \u003d backup[\u0027id\u0027]"},{"line_number":286,"context_line":"        volume_id \u003d backup[\u0027volume_id\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAATH%2F%2FeAU%3D","line":283,"updated":"2013-10-15 19:29:49.000000000","message":"_()","commit_id":"023fdc1bdafb922681f0d87e32af3e672de1a8f9"},{"author":{"_account_id":6506,"name":"Anastasia Guzikova","email":"aguzikova@mirantis.com","username":"aguzikova"},"change_message_id":"ec0315f94c0086390438db5225ee9bb45eb8264f","unresolved":false,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        # TODO(dosaboy): this needs to be implemented"},{"line_number":283,"context_line":"        if backup_metadata:"},{"line_number":284,"context_line":"            LOG.error(\"metadata backup not supported\")"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        backup_id \u003d backup[\u0027id\u0027]"},{"line_number":287,"context_line":"        volume_id \u003d backup[\u0027volume_id\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FjkU%3D","line":284,"updated":"2013-11-01 12:56:45.000000000","message":"ditto","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":6506,"name":"Anastasia Guzikova","email":"aguzikova@mirantis.com","username":"aguzikova"},"change_message_id":"1c813084371387927bbb6dd5f220824ce8f74d3e","unresolved":false,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        # TODO(dosaboy): this needs to be implemented"},{"line_number":283,"context_line":"        if backup_metadata:"},{"line_number":284,"context_line":"            LOG.error(\"metadata backup not supported\")"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        backup_id \u003d backup[\u0027id\u0027]"},{"line_number":287,"context_line":"        volume_id \u003d backup[\u0027volume_id\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FjCg%3D","line":284,"in_reply_to":"AAAATn%2F%2FjNI%3D","updated":"2013-11-01 15:32:16.000000000","message":"Done","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"f91e9527b3250dbac042709cf88637d874a5f32c","unresolved":false,"context_lines":[{"line_number":281,"context_line":""},{"line_number":282,"context_line":"        # TODO(dosaboy): this needs to be implemented"},{"line_number":283,"context_line":"        if backup_metadata:"},{"line_number":284,"context_line":"            LOG.error(\"metadata backup not supported\")"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"        backup_id \u003d backup[\u0027id\u0027]"},{"line_number":287,"context_line":"        volume_id \u003d backup[\u0027volume_id\u0027]"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F%2FjNI%3D","line":284,"in_reply_to":"AAAATn%2F%2FjkU%3D","updated":"2013-11-01 14:53:36.000000000","message":"Ditto here too (from swift.py)","commit_id":"b73cd7a05202dd21c714c6495d20323d3bb64ea4"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"b4cfc233e55f62bc7b33eaf2128885860f5dbfa3","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        if backup_metadata:"},{"line_number":285,"context_line":"            msg \u003d _(\"This driver does not support backing up volume metadata \""},{"line_number":286,"context_line":"                    \"but has been asked to do so.\")"},{"line_number":287,"context_line":"            raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        backup_id \u003d backup[\u0027id\u0027]"},{"line_number":290,"context_line":"        volume_id \u003d backup[\u0027volume_id\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2B21Y%3D","line":287,"updated":"2013-11-19 10:01:23.000000000","message":"should this be NotImplementedError() instead?","commit_id":"c67c1f9c05d4fdd9d00a57a7c5f50c2a880a8989"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"ac1268938bced1beb56b494bddcffdaea11c6355","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        if backup_metadata:"},{"line_number":285,"context_line":"            msg \u003d _(\"This driver does not support backing up volume metadata \""},{"line_number":286,"context_line":"                    \"but has been asked to do so.\")"},{"line_number":287,"context_line":"            raise exception.InvalidBackup(reason\u003dmsg)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        backup_id \u003d backup[\u0027id\u0027]"},{"line_number":290,"context_line":"        volume_id \u003d backup[\u0027volume_id\u0027]"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F%2B0yk%3D","line":287,"in_reply_to":"AAAATn%2F%2B21Y%3D","updated":"2013-11-19 17:16:21.000000000","message":"Ditto from swift.py","commit_id":"c67c1f9c05d4fdd9d00a57a7c5f50c2a880a8989"}],"cinder/exception.py":[{"author":{"_account_id":8574,"name":"Qin Zhao","username":"zhaoqin","inactive":true},"change_message_id":"e72061b1a78ccea46db104e7e6911caf2034143e","unresolved":false,"context_lines":[{"line_number":541,"context_line":""},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"class BackupMetadataUnsupportedVersion(BackupOperationError):"},{"line_number":544,"context_line":"    message \u003d _(\"unsupported backup metadata version requested\")"},{"line_number":545,"context_line":""},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"class VolumeMetadataBackupExists(BackupOperationError):"}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAATn%2F%2FHt0%3D","line":544,"updated":"2013-11-14 07:18:19.000000000","message":"unsupported --\u003e Unsupported","commit_id":"3248b122b5ac18ed3863e2be7d4a79de98a23c60"}],"cinder/tests/test_backup_ceph.py":[{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"085e66dd6763ebbaa27c78085fdad23650b85211","unresolved":false,"context_lines":[{"line_number":791,"context_line":"        mb.remove()"},{"line_number":792,"context_line":""},{"line_number":793,"context_line":"        self.assertEquals(called, [\u0027read\u0027, \u0027write\u0027, \u0027read\u0027, \u0027read\u0027, \u0027read\u0027,"},{"line_number":794,"context_line":"                                   \u0027read\u0027, \u0027read\u0027, \u0027remove\u0027])"},{"line_number":795,"context_line":""},{"line_number":796,"context_line":"    def test_restore_invalid_metadata_version(self):"},{"line_number":797,"context_line":"        self._create_volume_db_entry(self.volume_id, 1)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Bw04%3D","line":794,"updated":"2013-11-20 14:49:08.000000000","message":"It would be easier to maintain this text case if the call list is checked after each operation and then cleared before the next operation.","commit_id":"4e3d2942376bcd0c006c40f8c2d2fdaa28d5ced1"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"3206ab1e365a64f9f4e48cb175c487419b6e6fa6","unresolved":false,"context_lines":[{"line_number":791,"context_line":"        mb.remove()"},{"line_number":792,"context_line":""},{"line_number":793,"context_line":"        self.assertEquals(called, [\u0027read\u0027, \u0027write\u0027, \u0027read\u0027, \u0027read\u0027, \u0027read\u0027,"},{"line_number":794,"context_line":"                                   \u0027read\u0027, \u0027read\u0027, \u0027remove\u0027])"},{"line_number":795,"context_line":""},{"line_number":796,"context_line":"    def test_restore_invalid_metadata_version(self):"},{"line_number":797,"context_line":"        self._create_volume_db_entry(self.volume_id, 1)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F%2Bwu0%3D","line":794,"in_reply_to":"AAAATn%2F%2Bw04%3D","updated":"2013-11-20 15:13:44.000000000","message":"If I did that I would lose the ordering which is important i.e. if these operations do not occur in the given order it would indicate an error","commit_id":"4e3d2942376bcd0c006c40f8c2d2fdaa28d5ced1"},{"author":{"_account_id":6802,"name":"Joel Coffman","email":"jmc7tp@gmail.com","username":"joel-coffman"},"change_message_id":"a1709f1d3de95702bd330e6a84b2e8ebdefab9bf","unresolved":false,"context_lines":[{"line_number":23,"context_line":"import time"},{"line_number":24,"context_line":"import uuid"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"import cinder.backup.driver as driver"},{"line_number":27,"context_line":"import eventlet"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from cinder.backup.drivers import ceph"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F%2BvAo%3D","line":26,"updated":"2013-11-20 22:44:19.000000000","message":"This import statement should appear with the other cinder imports.","commit_id":"93ec4fc1b3d6553c1aea77cdfc01e61c9b001273"},{"author":{"_account_id":6737,"name":"Edward Hope-Morley","email":"edward.hope-morley@canonical.com","username":"hopem"},"change_message_id":"7654693c520e316fd8b36472ff98649ac19a47a2","unresolved":false,"context_lines":[{"line_number":23,"context_line":"import time"},{"line_number":24,"context_line":"import uuid"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"import cinder.backup.driver as driver"},{"line_number":27,"context_line":"import eventlet"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from cinder.backup.drivers import ceph"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F91iI%3D","line":26,"in_reply_to":"AAAATn%2F%2BvAo%3D","updated":"2013-12-05 12:21:52.000000000","message":"Done","commit_id":"93ec4fc1b3d6553c1aea77cdfc01e61c9b001273"}],"cinder/tests/test_backup_driver_base.py":[{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"769fc05f22f461e587429474ac85367a4b3019c7","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"\"\"\" Tests for the backup service base driver \"\"\""},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"import mock"},{"line_number":18,"context_line":"import uuid"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAUH%2F%2BSwI%3D","line":15,"updated":"2014-01-28 11:35:31.000000000","message":"docstrings should end with a period","commit_id":"dec962e3442a56a05ef930a72d83da6343d9f77c"}]}
