)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f5f245c6d497ae937ffb850788c24bbc1cb45054","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Implement a basic backup-volume-to-swift service"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As blueprinted at"},{"line_number":10,"context_line":"https://blueprints.launchpad.net/cinder/+spec/volume-backups"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This patch adds the new service, api and basic unit tests"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"AAAAM3%2F%2FhfI%3D","line":10,"updated":"2013-01-17 15:37:13.000000000","message":"Should be:\n\nImplements: blueprint volume-backups","commit_id":"73136f08302c030a6f4de44225385b67f751a12b"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"648436c179b0804cc06b26037d94890fde484c4d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Implement a basic backup-volume-to-swift service"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"As blueprinted at"},{"line_number":10,"context_line":"https://blueprints.launchpad.net/cinder/+spec/volume-backups"},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"This patch adds the new service, api and basic unit tests"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"AAAAM3%2F%2Ffzs%3D","line":10,"in_reply_to":"AAAAM3%2F%2FhfI%3D","updated":"2013-01-18 16:39:33.000000000","message":"Fixed","commit_id":"73136f08302c030a6f4de44225385b67f751a12b"}],"bin/cinder-backup":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\"\"\"Starter script for Cinder Volume Backup.\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import eventlet"},{"line_number":21,"context_line":"eventlet.monkey_patch()"},{"line_number":22,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":12,"id":"AAAAM3%2F%2Feno%3D","line":19,"updated":"2013-01-21 07:03:31.000000000","message":"import order should be:\n\n1) stdlib\n2) third-party\n3) cinder\n\nhttps://github.com/openstack/cinder/blob/master/HACKING.rst","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\"\"\"Starter script for Cinder Volume Backup.\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import eventlet"},{"line_number":21,"context_line":"eventlet.monkey_patch()"},{"line_number":22,"context_line":""}],"source_content_type":"application/octet-stream","patch_set":12,"id":"AAAAM3%2F%2FeCk%3D","line":19,"in_reply_to":"AAAAM3%2F%2Feno%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"}],"cinder/api/contrib/backups.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import webob"},{"line_number":21,"context_line":"from xml.dom import minidom"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder import backup"},{"line_number":24,"context_line":"from cinder import exception"},{"line_number":25,"context_line":"from cinder import flags"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fens%3D","line":22,"updated":"2013-01-21 07:03:31.000000000","message":"all these cinder imports should be grouped together per hacking file.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import webob"},{"line_number":21,"context_line":"from xml.dom import minidom"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder import backup"},{"line_number":24,"context_line":"from cinder import exception"},{"line_number":25,"context_line":"from cinder import flags"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeB0%3D","line":22,"in_reply_to":"AAAAM3%2F%2Fens%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder import backup"},{"line_number":24,"context_line":"from cinder import exception"},{"line_number":25,"context_line":"from cinder import flags"},{"line_number":26,"context_line":"from cinder import quota"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from cinder.api import common"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FerE%3D","line":25,"updated":"2013-01-21 07:03:31.000000000","message":"quota not being used","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder import backup"},{"line_number":24,"context_line":"from cinder import exception"},{"line_number":25,"context_line":"from cinder import flags"},{"line_number":26,"context_line":"from cinder import quota"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from cinder.api import common"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeDQ%3D","line":25,"in_reply_to":"AAAAM3%2F%2FerE%3D","updated":"2013-01-23 18:17:04.000000000","message":"quota import removed.\nChecked the other imports as well and they are all being used","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":36,"context_line":"FLAGS \u003d flags.FLAGS"},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def _translate_backup_summary_view(context, backup):"},{"line_number":41,"context_line":"    \"\"\""},{"line_number":42,"context_line":"    Maps keys for backup summary view."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Feq0%3D","line":39,"updated":"2013-01-21 07:03:31.000000000","message":"backup is already being used as an import reference in the namespace.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":36,"context_line":"FLAGS \u003d flags.FLAGS"},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"def _translate_backup_summary_view(context, backup):"},{"line_number":41,"context_line":"    \"\"\""},{"line_number":42,"context_line":"    Maps keys for backup summary view."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeA8%3D","line":39,"in_reply_to":"AAAAM3%2F%2Feq0%3D","updated":"2013-01-23 18:17:04.000000000","message":"Changed the import reference to:\n\"from cinder import backup as backupAPI\"","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    return d"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def _translate_backup_detail_view(context, backup):"},{"line_number":55,"context_line":"    \"\"\""},{"line_number":56,"context_line":"    Maps keys for backup detail view."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Feqw%3D","line":53,"updated":"2013-01-21 07:03:31.000000000","message":"backup is already being used as an import reference in the namespace.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":50,"context_line":""},{"line_number":51,"context_line":"    return d"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"def _translate_backup_detail_view(context, backup):"},{"line_number":55,"context_line":"    \"\"\""},{"line_number":56,"context_line":"    Maps keys for backup detail view."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeA4%3D","line":53,"in_reply_to":"AAAAM3%2F%2Feqw%3D","updated":"2013-01-23 18:17:04.000000000","message":"See previous related comment","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    elem.set(\u0027display_description\u0027)"},{"line_number":94,"context_line":"    elem.set(\u0027fail_reason\u0027)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def make_backup_restore(elem):"},{"line_number":98,"context_line":"    elem.set(\u0027backup_id\u0027)"},{"line_number":99,"context_line":"    elem.set(\u0027volume_id\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FecQ%3D","line":96,"updated":"2013-01-21 07:03:31.000000000","message":"I didn\u0027t find any test coverage for these templates.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":93,"context_line":"    elem.set(\u0027display_description\u0027)"},{"line_number":94,"context_line":"    elem.set(\u0027fail_reason\u0027)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"def make_backup_restore(elem):"},{"line_number":98,"context_line":"    elem.set(\u0027backup_id\u0027)"},{"line_number":99,"context_line":"    elem.set(\u0027volume_id\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FdnQ%3D","line":96,"in_reply_to":"AAAAM3%2F%2FecQ%3D","updated":"2013-01-23 18:17:04.000000000","message":"Added additional test cases. All templates should now have test coverage","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"class CreateDeserializer(wsgi.MetadataXMLDeserializer):"},{"line_number":131,"context_line":"    def default(self, string):"},{"line_number":132,"context_line":"        dom \u003d minidom.parseString(string)"},{"line_number":133,"context_line":"        backup \u003d self._extract_backup(dom)"},{"line_number":134,"context_line":"        return {\u0027body\u0027: {\u0027backup\u0027: backup}}"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Feq8%3D","line":132,"updated":"2013-01-21 07:03:31.000000000","message":"backup is already being used as an import reference in the namespace.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":129,"context_line":""},{"line_number":130,"context_line":"class CreateDeserializer(wsgi.MetadataXMLDeserializer):"},{"line_number":131,"context_line":"    def default(self, string):"},{"line_number":132,"context_line":"        dom \u003d minidom.parseString(string)"},{"line_number":133,"context_line":"        backup \u003d self._extract_backup(dom)"},{"line_number":134,"context_line":"        return {\u0027body\u0027: {\u0027backup\u0027: backup}}"},{"line_number":135,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeAw%3D","line":132,"in_reply_to":"AAAAM3%2F%2Feq8%3D","updated":"2013-01-23 18:17:04.000000000","message":"See previous related comment","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        backup \u003d self._extract_backup(dom)"},{"line_number":134,"context_line":"        return {\u0027body\u0027: {\u0027backup\u0027: backup}}"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def _extract_backup(self, node):"},{"line_number":137,"context_line":"        backup \u003d {}"},{"line_number":138,"context_line":"        backup_node \u003d self.find_first_child_named(node, \u0027backup\u0027)"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Feq4%3D","line":136,"updated":"2013-01-21 07:03:31.000000000","message":"backup is already being used as an import reference in the namespace.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":133,"context_line":"        backup \u003d self._extract_backup(dom)"},{"line_number":134,"context_line":"        return {\u0027body\u0027: {\u0027backup\u0027: backup}}"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"    def _extract_backup(self, node):"},{"line_number":137,"context_line":"        backup \u003d {}"},{"line_number":138,"context_line":"        backup_node \u003d self.find_first_child_named(node, \u0027backup\u0027)"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeAs%3D","line":136,"in_reply_to":"AAAAM3%2F%2Feq4%3D","updated":"2013-01-23 18:17:04.000000000","message":"See previous related comment","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        LOG.debug(\u0027show called for member %s\u0027 % id)"},{"line_number":178,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            backup \u003d self.backup_api.get(context, backup_id\u003did)"},{"line_number":182,"context_line":"        except exception.BackupNotFound as error:"},{"line_number":183,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dunicode(error))"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Feqs%3D","line":180,"updated":"2013-01-21 07:03:31.000000000","message":"backup is already being used as an import reference in the namespace.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        LOG.debug(\u0027show called for member %s\u0027 % id)"},{"line_number":178,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"        try:"},{"line_number":181,"context_line":"            backup \u003d self.backup_api.get(context, backup_id\u003did)"},{"line_number":182,"context_line":"        except exception.BackupNotFound as error:"},{"line_number":183,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dunicode(error))"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeAo%3D","line":180,"in_reply_to":"AAAAM3%2F%2Feqs%3D","updated":"2013-01-23 18:17:04.000000000","message":"See previous related comment","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        Create a new backup."},{"line_number":224,"context_line":"        \"\"\""},{"line_number":225,"context_line":"        LOG.debug(\u0027Creating new backup %s\u0027 % body)"},{"line_number":226,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":227,"context_line":"        if not body:"},{"line_number":228,"context_line":"            raise webob.exc.HTTPUnprocessableEntity()"},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FecM%3D","line":226,"updated":"2013-01-21 07:03:31.000000000","message":"no test coverage","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":223,"context_line":"        Create a new backup."},{"line_number":224,"context_line":"        \"\"\""},{"line_number":225,"context_line":"        LOG.debug(\u0027Creating new backup %s\u0027 % body)"},{"line_number":226,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":227,"context_line":"        if not body:"},{"line_number":228,"context_line":"            raise webob.exc.HTTPUnprocessableEntity()"},{"line_number":229,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fcgc%3D","line":226,"in_reply_to":"AAAAM3%2F%2FecM%3D","updated":"2013-01-23 18:17:04.000000000","message":"Added additional test cases. This now has test coverage","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        if not body:"},{"line_number":228,"context_line":"            raise webob.exc.HTTPUnprocessableEntity()"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        try:"},{"line_number":231,"context_line":"            backup \u003d body[\u0027backup\u0027]"},{"line_number":232,"context_line":"            volume_id \u003d backup[\u0027volume_id\u0027]"},{"line_number":233,"context_line":"        except KeyError:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Feqo%3D","line":230,"updated":"2013-01-21 07:03:31.000000000","message":"backup is already being used as an import reference in the namespace.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":227,"context_line":"        if not body:"},{"line_number":228,"context_line":"            raise webob.exc.HTTPUnprocessableEntity()"},{"line_number":229,"context_line":""},{"line_number":230,"context_line":"        try:"},{"line_number":231,"context_line":"            backup \u003d body[\u0027backup\u0027]"},{"line_number":232,"context_line":"            volume_id \u003d backup[\u0027volume_id\u0027]"},{"line_number":233,"context_line":"        except KeyError:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeAk%3D","line":230,"in_reply_to":"AAAAM3%2F%2Feqo%3D","updated":"2013-01-23 18:17:04.000000000","message":"See previous related comment","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        name \u003d backup.get(\u0027display_name\u0027, None)"},{"line_number":238,"context_line":"        description \u003d backup.get(\u0027display_description\u0027, None)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        LOG.audit(_(\"Creating backup of volume %(volume_id)s in container\""},{"line_number":241,"context_line":"                    \" %(container)s\"), locals(), context\u003dcontext)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeoQ%3D","line":240,"updated":"2013-01-21 07:03:31.000000000","message":"Really not a fan of locals, but you can just pass backup and still get the name placeholders. Also what is the point of context here?","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":237,"context_line":"        name \u003d backup.get(\u0027display_name\u0027, None)"},{"line_number":238,"context_line":"        description \u003d backup.get(\u0027display_description\u0027, None)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"        LOG.audit(_(\"Creating backup of volume %(volume_id)s in container\""},{"line_number":241,"context_line":"                    \" %(container)s\"), locals(), context\u003dcontext)"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FcZY%3D","line":240,"in_reply_to":"AAAAM3%2F%2FeoQ%3D","updated":"2013-01-23 18:17:04.000000000","message":"If we don\u0027t use locals() PEP8 compliance test fails with: \"CIND R N703: Multiple positional placeholders\"\n\nUse of context is following the convention set in volumes api","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dunicode(error))"},{"line_number":248,"context_line":"        except exception.VolumeNotFound as error:"},{"line_number":249,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dunicode(error))"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        retval \u003d _translate_backup_detail_view(context, new_backup)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        return {\u0027backup\u0027: retval}"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeoA%3D","line":250,"updated":"2013-01-21 07:03:31.000000000","message":"Just a thought, but on other create actions in the restful api, such as volume create, a summary view is given instead of detail.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"9770e09229c8f0968cf1f14408a5ad605de2a9b6","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dunicode(error))"},{"line_number":248,"context_line":"        except exception.VolumeNotFound as error:"},{"line_number":249,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dunicode(error))"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        retval \u003d _translate_backup_detail_view(context, new_backup)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        return {\u0027backup\u0027: retval}"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FP8A%3D","line":250,"in_reply_to":"AAAAM3%2F%2FWN8%3D","updated":"2013-01-31 18:52:10.000000000","message":"create now returns a summary view - specifically the backup id and the backup status","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"7cf67af51548289cd7764d1d60c1b74df34923b2","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dunicode(error))"},{"line_number":248,"context_line":"        except exception.VolumeNotFound as error:"},{"line_number":249,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dunicode(error))"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        retval \u003d _translate_backup_detail_view(context, new_backup)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        return {\u0027backup\u0027: retval}"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FWN8%3D","line":250,"in_reply_to":"AAAAM3%2F%2FcWg%3D","updated":"2013-01-27 00:24:29.000000000","message":"That was incorrect in v1 and is fixed in v2. It follows consistency of all other core projects.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":247,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dunicode(error))"},{"line_number":248,"context_line":"        except exception.VolumeNotFound as error:"},{"line_number":249,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dunicode(error))"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        retval \u003d _translate_backup_detail_view(context, new_backup)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        return {\u0027backup\u0027: retval}"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FcWg%3D","line":250,"in_reply_to":"AAAAM3%2F%2FeoA%3D","updated":"2013-01-23 18:17:04.000000000","message":"A detail view is returned as we\u0027re following the convention set by the v1 volumes API which returns a detail view for create","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dunicode(error))"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        retval \u003d _translate_backup_detail_view(context, new_backup)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        return {\u0027backup\u0027: retval}"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def delete(self, req, id):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeRQ%3D","line":252,"updated":"2013-01-21 07:03:31.000000000","message":"Should also be a 202","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"9770e09229c8f0968cf1f14408a5ad605de2a9b6","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dunicode(error))"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        retval \u003d _translate_backup_detail_view(context, new_backup)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        return {\u0027backup\u0027: retval}"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def delete(self, req, id):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FP6s%3D","line":252,"in_reply_to":"AAAAM3%2F%2FWOA%3D","updated":"2013-01-31 18:52:10.000000000","message":"create now returning a 202","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"7cf67af51548289cd7764d1d60c1b74df34923b2","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dunicode(error))"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        retval \u003d _translate_backup_detail_view(context, new_backup)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        return {\u0027backup\u0027: retval}"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def delete(self, req, id):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FWOA%3D","line":252,"in_reply_to":"AAAAM3%2F%2Fbr8%3D","updated":"2013-01-27 00:24:29.000000000","message":"Understood, however, v2 will be correcting this to follow other core projects to be consistent. I think new code coming in though should be giving a correct response code since this would be something accepted, but still having to process the creation of the backup.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":249,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003dunicode(error))"},{"line_number":250,"context_line":""},{"line_number":251,"context_line":"        retval \u003d _translate_backup_detail_view(context, new_backup)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        return {\u0027backup\u0027: retval}"},{"line_number":254,"context_line":""},{"line_number":255,"context_line":"    def delete(self, req, id):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fbr8%3D","line":252,"in_reply_to":"AAAAM3%2F%2FeRQ%3D","updated":"2013-01-23 18:17:04.000000000","message":"Following convention in volumes api where 200 is returned on success","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        \"\"\""},{"line_number":279,"context_line":"        backup_id \u003d int(id)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        if not body:"},{"line_number":282,"context_line":"            raise webob.exc.HTTPUnprocessableEntity()"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        LOG.debug(\u0027Restore backup %d (%s)\u0027 % (backup_id, body))"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FecI%3D","line":281,"updated":"2013-01-21 07:03:31.000000000","message":"no test coverage","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":278,"context_line":"        \"\"\""},{"line_number":279,"context_line":"        backup_id \u003d int(id)"},{"line_number":280,"context_line":""},{"line_number":281,"context_line":"        if not body:"},{"line_number":282,"context_line":"            raise webob.exc.HTTPUnprocessableEntity()"},{"line_number":283,"context_line":""},{"line_number":284,"context_line":"        LOG.debug(\u0027Restore backup %d (%s)\u0027 % (backup_id, body))"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FcgY%3D","line":281,"in_reply_to":"AAAAM3%2F%2FecI%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        try:"},{"line_number":288,"context_line":"            restore \u003d body[\u0027restore\u0027]"},{"line_number":289,"context_line":"        except KeyError:"},{"line_number":290,"context_line":"            msg \u003d _(\"Incorrect request body format\")"},{"line_number":291,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FecE%3D","line":288,"updated":"2013-01-21 07:03:31.000000000","message":"no test coverage","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":285,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        try:"},{"line_number":288,"context_line":"            restore \u003d body[\u0027restore\u0027]"},{"line_number":289,"context_line":"        except KeyError:"},{"line_number":290,"context_line":"            msg \u003d _(\"Incorrect request body format\")"},{"line_number":291,"context_line":"            raise webob.exc.HTTPBadRequest(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FcgU%3D","line":288,"in_reply_to":"AAAAM3%2F%2FecE%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        except exception.VolumeLimitExceeded as error:"},{"line_number":315,"context_line":"            raise webob.exc.HTTPRequestEntityTooLarge("},{"line_number":316,"context_line":"                explanation\u003derror.message, headers\u003d{\u0027Retry-After\u0027: 0})"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        return {\u0027restore\u0027: _translate_restore_summary_view(context,"},{"line_number":319,"context_line":"                                                           new_restore)}"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeRU%3D","line":317,"updated":"2013-01-21 07:03:31.000000000","message":"Should also be a 202","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"9770e09229c8f0968cf1f14408a5ad605de2a9b6","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        except exception.VolumeLimitExceeded as error:"},{"line_number":315,"context_line":"            raise webob.exc.HTTPRequestEntityTooLarge("},{"line_number":316,"context_line":"                explanation\u003derror.message, headers\u003d{\u0027Retry-After\u0027: 0})"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        return {\u0027restore\u0027: _translate_restore_summary_view(context,"},{"line_number":319,"context_line":"                                                           new_restore)}"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FP6g%3D","line":317,"in_reply_to":"AAAAM3%2F%2FWOI%3D","updated":"2013-01-31 18:52:10.000000000","message":"restore now returning a 202","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"7cf67af51548289cd7764d1d60c1b74df34923b2","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        except exception.VolumeLimitExceeded as error:"},{"line_number":315,"context_line":"            raise webob.exc.HTTPRequestEntityTooLarge("},{"line_number":316,"context_line":"                explanation\u003derror.message, headers\u003d{\u0027Retry-After\u0027: 0})"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        return {\u0027restore\u0027: _translate_restore_summary_view(context,"},{"line_number":319,"context_line":"                                                           new_restore)}"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FWOI%3D","line":317,"in_reply_to":"AAAAM3%2F%2Fbr4%3D","updated":"2013-01-27 00:24:29.000000000","message":"Understood, however, v2 will be correcting this to follow other core projects to be consistent. I think new code coming in though should be giving a correct response code since this would be something accepted, but still having to process the restore.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":314,"context_line":"        except exception.VolumeLimitExceeded as error:"},{"line_number":315,"context_line":"            raise webob.exc.HTTPRequestEntityTooLarge("},{"line_number":316,"context_line":"                explanation\u003derror.message, headers\u003d{\u0027Retry-After\u0027: 0})"},{"line_number":317,"context_line":""},{"line_number":318,"context_line":"        return {\u0027restore\u0027: _translate_restore_summary_view(context,"},{"line_number":319,"context_line":"                                                           new_restore)}"},{"line_number":320,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fbr4%3D","line":317,"in_reply_to":"AAAAM3%2F%2FeRU%3D","updated":"2013-01-23 18:17:04.000000000","message":"Following convention in volumes api where 200 is returned on success","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"801e0483ce9488a751218e8c6839e38e34dd47cd","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"The volume backups extension."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from xml.dom import minidom"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import webob"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FWOc%3D","line":19,"updated":"2013-01-27 00:30:42.000000000","message":"Thirdparty modules should be grouped together, no newline needed.\n\nhttps://github.com/openstack/cinder/blob/master/HACKING.rst","commit_id":"5e08f0b55fa8fb2e4ad70b27e878d67e457ac3b8"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"68f36283f2aac01f115ccd685314e355acce6d0a","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"The volume backups extension."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"from xml.dom import minidom"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"import webob"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FQME%3D","line":19,"in_reply_to":"AAAAM3%2F%2FWOc%3D","updated":"2013-01-31 18:58:06.000000000","message":"Done","commit_id":"5e08f0b55fa8fb2e4ad70b27e878d67e457ac3b8"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"098fb4143033b42d5599a4ce1ef960974f35243d","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    return d"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"def _translate_restore_summary_view(context, restore):"},{"line_number":74,"context_line":"    \"\"\""},{"line_number":75,"context_line":"    Maps keys for restore summary view"},{"line_number":76,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FXtI%3D","line":73,"updated":"2013-01-25 03:42:12.000000000","message":"?","commit_id":"5e08f0b55fa8fb2e4ad70b27e878d67e457ac3b8"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"68f36283f2aac01f115ccd685314e355acce6d0a","unresolved":false,"context_lines":[{"line_number":70,"context_line":"    return d"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"def _translate_restore_summary_view(context, restore):"},{"line_number":74,"context_line":"    \"\"\""},{"line_number":75,"context_line":"    Maps keys for restore summary view"},{"line_number":76,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FQLI%3D","line":73,"in_reply_to":"AAAAM3%2F%2FXtI%3D","updated":"2013-01-31 18:58:06.000000000","message":"I\u0027ve removed this function and edited the restore function to remove the call to it.","commit_id":"5e08f0b55fa8fb2e4ad70b27e878d67e457ac3b8"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"c31f70124277b51c8460d48add8d924df2d69f85","unresolved":false,"context_lines":[{"line_number":267,"context_line":"        \"\"\""},{"line_number":268,"context_line":"        Restore an existing backup to a volume."},{"line_number":269,"context_line":"        \"\"\""},{"line_number":270,"context_line":"        backup_id \u003d int(id)"},{"line_number":271,"context_line":""},{"line_number":272,"context_line":"        if not body:"},{"line_number":273,"context_line":"            raise webob.exc.HTTPUnprocessableEntity()"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2FLto%3D","line":270,"updated":"2013-02-04 17:39:07.000000000","message":"UUID, see comment in models.py","commit_id":"d86711045e845f9cf0bca149c74ad29148efce71"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"e47cd36e64b3f72c84c88c0b439a80a5f5d76bac","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    return d"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"def _translate_backup_detail_view(context, backup):"},{"line_number":51,"context_line":"    \"\"\""},{"line_number":52,"context_line":"    Maps keys for backup detail view."},{"line_number":53,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B4g0%3D","line":50,"updated":"2013-02-15 17:38:32.000000000","message":"We\u0027ve moved to using using ViewBuilder class if I am right","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"1f9747376658dafdba9b52de1ea9b52e114ccd5f","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    return d"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"def _translate_backup_detail_view(context, backup):"},{"line_number":51,"context_line":"    \"\"\""},{"line_number":52,"context_line":"    Maps keys for backup detail view."},{"line_number":53,"context_line":"    \"\"\""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B34k%3D","line":50,"in_reply_to":"AAAAM3%2F%2B4g0%3D","updated":"2013-02-15 21:04:48.000000000","message":"Good catch Rushi. This should be handled in cinder.api.views","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"e47cd36e64b3f72c84c88c0b439a80a5f5d76bac","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        \"\"\""},{"line_number":164,"context_line":"        Return data about the given backup."},{"line_number":165,"context_line":"        \"\"\""},{"line_number":166,"context_line":"        LOG.debug(\u0027show called for member %s\u0027 % id)"},{"line_number":167,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B4hE%3D","line":166,"updated":"2013-02-15 17:38:32.000000000","message":"i18n","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"ad2492dd093cf9dc16e471141ca50442379b4ae9","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        \"\"\""},{"line_number":164,"context_line":"        Return data about the given backup."},{"line_number":165,"context_line":"        \"\"\""},{"line_number":166,"context_line":"        LOG.debug(\u0027show called for member %s\u0027 % id)"},{"line_number":167,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B3jQ%3D","line":166,"in_reply_to":"AAAAM3%2F%2B4hE%3D","updated":"2013-02-16 00:14:17.000000000","message":"Debug message is ok not to be translated.","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":6153,"name":"stephen-mulcahy","email":"stephen.mulcahy@hpe.com","username":"stephen-mulcahy"},"change_message_id":"b8e7e49636976baeea201f6c100d7f251a8661f9","unresolved":false,"context_lines":[{"line_number":163,"context_line":"        \"\"\""},{"line_number":164,"context_line":"        Return data about the given backup."},{"line_number":165,"context_line":"        \"\"\""},{"line_number":166,"context_line":"        LOG.debug(\u0027show called for member %s\u0027 % id)"},{"line_number":167,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":168,"context_line":""},{"line_number":169,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2Bxso%3D","line":166,"in_reply_to":"AAAAM3%2F%2B4hE%3D","updated":"2013-02-19 16:00:28.000000000","message":"Done","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"e47cd36e64b3f72c84c88c0b439a80a5f5d76bac","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        \"\"\""},{"line_number":178,"context_line":"        Returns a list of backups, transformed through entity_maker."},{"line_number":179,"context_line":"        \"\"\""},{"line_number":180,"context_line":"        LOG.debug(\u0027Returning a list of backups\u0027)"},{"line_number":181,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        backups \u003d self.backup_api.get_all(context)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B4gs%3D","line":180,"updated":"2013-02-15 17:38:32.000000000","message":"i18n","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"ad2492dd093cf9dc16e471141ca50442379b4ae9","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        \"\"\""},{"line_number":178,"context_line":"        Returns a list of backups, transformed through entity_maker."},{"line_number":179,"context_line":"        \"\"\""},{"line_number":180,"context_line":"        LOG.debug(\u0027Returning a list of backups\u0027)"},{"line_number":181,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        backups \u003d self.backup_api.get_all(context)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B3jM%3D","line":180,"in_reply_to":"AAAAM3%2F%2B4gs%3D","updated":"2013-02-16 00:14:17.000000000","message":"Debug message is ok not to be translated.","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":6153,"name":"stephen-mulcahy","email":"stephen.mulcahy@hpe.com","username":"stephen-mulcahy"},"change_message_id":"b8e7e49636976baeea201f6c100d7f251a8661f9","unresolved":false,"context_lines":[{"line_number":177,"context_line":"        \"\"\""},{"line_number":178,"context_line":"        Returns a list of backups, transformed through entity_maker."},{"line_number":179,"context_line":"        \"\"\""},{"line_number":180,"context_line":"        LOG.debug(\u0027Returning a list of backups\u0027)"},{"line_number":181,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":182,"context_line":""},{"line_number":183,"context_line":"        backups \u003d self.backup_api.get_all(context)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2Bxsk%3D","line":180,"in_reply_to":"AAAAM3%2F%2B4gs%3D","updated":"2013-02-19 16:00:28.000000000","message":"Done","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"e47cd36e64b3f72c84c88c0b439a80a5f5d76bac","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        \"\"\""},{"line_number":191,"context_line":"        Returns a list of backup ids and status."},{"line_number":192,"context_line":"        \"\"\""},{"line_number":193,"context_line":"        LOG.debug(\u0027Listing backup ids and status\u0027)"},{"line_number":194,"context_line":"        return self._items(req, entity_maker\u003d_translate_backup_summary_view)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @wsgi.serializers(xml\u003dBackupsTemplate)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B4gY%3D","line":193,"updated":"2013-02-15 17:38:32.000000000","message":"i18n","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"ad2492dd093cf9dc16e471141ca50442379b4ae9","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        \"\"\""},{"line_number":191,"context_line":"        Returns a list of backup ids and status."},{"line_number":192,"context_line":"        \"\"\""},{"line_number":193,"context_line":"        LOG.debug(\u0027Listing backup ids and status\u0027)"},{"line_number":194,"context_line":"        return self._items(req, entity_maker\u003d_translate_backup_summary_view)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @wsgi.serializers(xml\u003dBackupsTemplate)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B3jI%3D","line":193,"in_reply_to":"AAAAM3%2F%2B4gY%3D","updated":"2013-02-16 00:14:17.000000000","message":"Debug message is ok not to be translated.","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":6153,"name":"stephen-mulcahy","email":"stephen.mulcahy@hpe.com","username":"stephen-mulcahy"},"change_message_id":"b8e7e49636976baeea201f6c100d7f251a8661f9","unresolved":false,"context_lines":[{"line_number":190,"context_line":"        \"\"\""},{"line_number":191,"context_line":"        Returns a list of backup ids and status."},{"line_number":192,"context_line":"        \"\"\""},{"line_number":193,"context_line":"        LOG.debug(\u0027Listing backup ids and status\u0027)"},{"line_number":194,"context_line":"        return self._items(req, entity_maker\u003d_translate_backup_summary_view)"},{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @wsgi.serializers(xml\u003dBackupsTemplate)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2Bxsc%3D","line":193,"in_reply_to":"AAAAM3%2F%2B4gY%3D","updated":"2013-02-19 16:00:28.000000000","message":"Done","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"e47cd36e64b3f72c84c88c0b439a80a5f5d76bac","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        \"\"\""},{"line_number":199,"context_line":"        Returns a detailed list of backups."},{"line_number":200,"context_line":"        \"\"\""},{"line_number":201,"context_line":"        LOG.debug(\u0027Listing backup details\u0027)"},{"line_number":202,"context_line":"        return self._items(req, entity_maker\u003d_translate_backup_detail_view)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    # TODO(frankm): Add some checks here including"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B4gM%3D","line":201,"updated":"2013-02-15 17:38:32.000000000","message":"i18n","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"ad2492dd093cf9dc16e471141ca50442379b4ae9","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        \"\"\""},{"line_number":199,"context_line":"        Returns a detailed list of backups."},{"line_number":200,"context_line":"        \"\"\""},{"line_number":201,"context_line":"        LOG.debug(\u0027Listing backup details\u0027)"},{"line_number":202,"context_line":"        return self._items(req, entity_maker\u003d_translate_backup_detail_view)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    # TODO(frankm): Add some checks here including"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B3jE%3D","line":201,"in_reply_to":"AAAAM3%2F%2B4gM%3D","updated":"2013-02-16 00:14:17.000000000","message":"Debug message is ok not to be translated.","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":6153,"name":"stephen-mulcahy","email":"stephen.mulcahy@hpe.com","username":"stephen-mulcahy"},"change_message_id":"b8e7e49636976baeea201f6c100d7f251a8661f9","unresolved":false,"context_lines":[{"line_number":198,"context_line":"        \"\"\""},{"line_number":199,"context_line":"        Returns a detailed list of backups."},{"line_number":200,"context_line":"        \"\"\""},{"line_number":201,"context_line":"        LOG.debug(\u0027Listing backup details\u0027)"},{"line_number":202,"context_line":"        return self._items(req, entity_maker\u003d_translate_backup_detail_view)"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"    # TODO(frankm): Add some checks here including"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2BxsU%3D","line":201,"in_reply_to":"AAAAM3%2F%2B4gM%3D","updated":"2013-02-19 16:00:28.000000000","message":"Done","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"e47cd36e64b3f72c84c88c0b439a80a5f5d76bac","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        \"\"\""},{"line_number":213,"context_line":"        Create a new backup."},{"line_number":214,"context_line":"        \"\"\""},{"line_number":215,"context_line":"        LOG.debug(\u0027Creating new backup %s\u0027 % body)"},{"line_number":216,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":217,"context_line":"        if not body:"},{"line_number":218,"context_line":"            raise webob.exc.HTTPUnprocessableEntity()"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B4fg%3D","line":215,"updated":"2013-02-15 17:38:32.000000000","message":"i18n","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"ad2492dd093cf9dc16e471141ca50442379b4ae9","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        \"\"\""},{"line_number":213,"context_line":"        Create a new backup."},{"line_number":214,"context_line":"        \"\"\""},{"line_number":215,"context_line":"        LOG.debug(\u0027Creating new backup %s\u0027 % body)"},{"line_number":216,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":217,"context_line":"        if not body:"},{"line_number":218,"context_line":"            raise webob.exc.HTTPUnprocessableEntity()"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B3i4%3D","line":215,"in_reply_to":"AAAAM3%2F%2B4fg%3D","updated":"2013-02-16 00:14:17.000000000","message":"Debug message is ok not to be translated.","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":6153,"name":"stephen-mulcahy","email":"stephen.mulcahy@hpe.com","username":"stephen-mulcahy"},"change_message_id":"b8e7e49636976baeea201f6c100d7f251a8661f9","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        \"\"\""},{"line_number":213,"context_line":"        Create a new backup."},{"line_number":214,"context_line":"        \"\"\""},{"line_number":215,"context_line":"        LOG.debug(\u0027Creating new backup %s\u0027 % body)"},{"line_number":216,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":217,"context_line":"        if not body:"},{"line_number":218,"context_line":"            raise webob.exc.HTTPUnprocessableEntity()"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2BxsQ%3D","line":215,"in_reply_to":"AAAAM3%2F%2B4fg%3D","updated":"2013-02-19 16:00:28.000000000","message":"Done","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"e47cd36e64b3f72c84c88c0b439a80a5f5d76bac","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        if not body:"},{"line_number":273,"context_line":"            raise webob.exc.HTTPUnprocessableEntity()"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        LOG.debug(\u0027Restore backup %s (%s)\u0027 % (backup_id, body))"},{"line_number":276,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B4fE%3D","line":275,"updated":"2013-02-15 17:38:32.000000000","message":"i18n","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"ad2492dd093cf9dc16e471141ca50442379b4ae9","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        if not body:"},{"line_number":273,"context_line":"            raise webob.exc.HTTPUnprocessableEntity()"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        LOG.debug(\u0027Restore backup %s (%s)\u0027 % (backup_id, body))"},{"line_number":276,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B3i0%3D","line":275,"in_reply_to":"AAAAM3%2F%2B4fE%3D","updated":"2013-02-16 00:14:17.000000000","message":"Debug message is ok not to be translated.","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":6153,"name":"stephen-mulcahy","email":"stephen.mulcahy@hpe.com","username":"stephen-mulcahy"},"change_message_id":"b8e7e49636976baeea201f6c100d7f251a8661f9","unresolved":false,"context_lines":[{"line_number":272,"context_line":"        if not body:"},{"line_number":273,"context_line":"            raise webob.exc.HTTPUnprocessableEntity()"},{"line_number":274,"context_line":""},{"line_number":275,"context_line":"        LOG.debug(\u0027Restore backup %s (%s)\u0027 % (backup_id, body))"},{"line_number":276,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":277,"context_line":""},{"line_number":278,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2BxsE%3D","line":275,"in_reply_to":"AAAAM3%2F%2B4fE%3D","updated":"2013-02-19 16:00:28.000000000","message":"Done","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"e47cd36e64b3f72c84c88c0b439a80a5f5d76bac","unresolved":false,"context_lines":[{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    def get_resources(self):"},{"line_number":323,"context_line":"        \"\"\""},{"line_number":324,"context_line":"        Register volume backups as a resource extension"},{"line_number":325,"context_line":"        \"\"\""},{"line_number":326,"context_line":"        resources \u003d []"},{"line_number":327,"context_line":"        res \u003d extensions.ResourceExtension("}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B4e0%3D","line":324,"updated":"2013-02-15 17:38:32.000000000","message":"Period at end of sentence.","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":6153,"name":"stephen-mulcahy","email":"stephen.mulcahy@hpe.com","username":"stephen-mulcahy"},"change_message_id":"b8e7e49636976baeea201f6c100d7f251a8661f9","unresolved":false,"context_lines":[{"line_number":321,"context_line":""},{"line_number":322,"context_line":"    def get_resources(self):"},{"line_number":323,"context_line":"        \"\"\""},{"line_number":324,"context_line":"        Register volume backups as a resource extension"},{"line_number":325,"context_line":"        \"\"\""},{"line_number":326,"context_line":"        resources \u003d []"},{"line_number":327,"context_line":"        res \u003d extensions.ResourceExtension("}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2Bxrw%3D","line":324,"in_reply_to":"AAAAM3%2F%2B4e0%3D","updated":"2013-02-19 16:00:28.000000000","message":"Done","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"82dbb57d21f6d484dfa8d98d73862b777aeade9e","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from cinder.api.openstack import wsgi"},{"line_number":25,"context_line":"from cinder.api.views import backups as backup_views"},{"line_number":26,"context_line":"from cinder.api import xmlutil"},{"line_number":27,"context_line":"from cinder import backup"},{"line_number":28,"context_line":"from cinder import exception"},{"line_number":29,"context_line":"from cinder import flags"},{"line_number":30,"context_line":"from cinder.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":22,"id":"AAAAM3%2F%2Bt0U%3D","line":27,"updated":"2013-02-20 22:04:32.000000000","message":"I had this switched to backupAPI since this import reference would introduce conflicts in the namespace.","commit_id":"03c1748615670c17b46608e928b7a551808cabc3"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"a0555e17e7021f1a8cfcfb4f5316f3a4978e00ea","unresolved":false,"context_lines":[{"line_number":24,"context_line":"from cinder.api.openstack import wsgi"},{"line_number":25,"context_line":"from cinder.api.views import backups as backup_views"},{"line_number":26,"context_line":"from cinder.api import xmlutil"},{"line_number":27,"context_line":"from cinder import backupAPI"},{"line_number":28,"context_line":"from cinder import exception"},{"line_number":29,"context_line":"from cinder import flags"},{"line_number":30,"context_line":"from cinder.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":23,"id":"AAAAM3%2F%2BtsQ%3D","line":27,"updated":"2013-02-20 22:04:10.000000000","message":"should be from cinder import backup as backupAPI","commit_id":"b453cc656a492e83c873841a672905c7e3ca8a5e"}],"cinder/backup/__init__.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"# Importing full names to not pollute the namespace and cause possible"},{"line_number":17,"context_line":"# collisions with use of \u0027from cinder.backup import \u003cfoo\u003e\u0027 elsewhere."},{"line_number":18,"context_line":"import cinder.flags"},{"line_number":19,"context_line":"import cinder.openstack.common.importutils"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fenk%3D","line":17,"updated":"2013-01-21 07:03:31.000000000","message":"newline here.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"# Importing full names to not pollute the namespace and cause possible"},{"line_number":17,"context_line":"# collisions with use of \u0027from cinder.backup import \u003cfoo\u003e\u0027 elsewhere."},{"line_number":18,"context_line":"import cinder.flags"},{"line_number":19,"context_line":"import cinder.openstack.common.importutils"},{"line_number":20,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FcU8%3D","line":17,"in_reply_to":"AAAAM3%2F%2Fenk%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"}],"cinder/backup/api.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Handles all requests relating to the volume backups service."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":"from eventlet import greenthread"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder import db"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Feng%3D","line":18,"updated":"2013-01-21 07:03:31.000000000","message":"newline here.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Handles all requests relating to the volume backups service."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":"from eventlet import greenthread"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder import db"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FcU4%3D","line":18,"in_reply_to":"AAAAM3%2F%2Feng%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Handles all requests relating to the volume backups service."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":"from eventlet import greenthread"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder import db"},{"line_number":22,"context_line":"from cinder import exception"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fenw%3D","line":19,"updated":"2013-01-21 07:03:31.000000000","message":"All of these imports should be grouped together without being separated, per hacking file.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Handles all requests relating to the volume backups service."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":"from eventlet import greenthread"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder import db"},{"line_number":22,"context_line":"from cinder import exception"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FcUY%3D","line":19,"in_reply_to":"AAAAM3%2F%2Fenw%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Handles all requests relating to the volume backups service."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":"from eventlet import greenthread"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder import db"},{"line_number":22,"context_line":"from cinder import exception"},{"line_number":23,"context_line":"from cinder import flags"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fen8%3D","line":20,"updated":"2013-01-21 07:03:31.000000000","message":"db not being used.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":17,"context_line":"Handles all requests relating to the volume backups service."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":"from eventlet import greenthread"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder import db"},{"line_number":22,"context_line":"from cinder import exception"},{"line_number":23,"context_line":"from cinder import flags"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FcT4%3D","line":20,"in_reply_to":"AAAAM3%2F%2Fen8%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder import db"},{"line_number":22,"context_line":"from cinder import exception"},{"line_number":23,"context_line":"from cinder import flags"},{"line_number":24,"context_line":"from cinder import quota"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from cinder.db import base"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fen4%3D","line":23,"updated":"2013-01-21 07:03:31.000000000","message":"quota not being used","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder import db"},{"line_number":22,"context_line":"from cinder import exception"},{"line_number":23,"context_line":"from cinder import flags"},{"line_number":24,"context_line":"from cinder import quota"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from cinder.db import base"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FcUM%3D","line":23,"in_reply_to":"AAAAM3%2F%2Fen4%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from cinder.db import base"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":29,"context_line":"from cinder.openstack.common import rpc"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"from cinder.scheduler import rpcapi as scheduler_rpcapi"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fen0%3D","line":28,"updated":"2013-01-21 07:03:31.000000000","message":"rpc not being used","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from cinder.db import base"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":29,"context_line":"from cinder.openstack.common import rpc"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"from cinder.scheduler import rpcapi as scheduler_rpcapi"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FcUI%3D","line":28,"in_reply_to":"AAAAM3%2F%2Fen0%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"}],"cinder/backup/manager.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                          :class:`manager.Manager` (default:"},{"line_number":30,"context_line":"                          :class:`cinder.backup.manager.Manager`)."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"\"\"\""},{"line_number":33,"context_line":"from cinder import context"},{"line_number":34,"context_line":"from cinder import exception"},{"line_number":35,"context_line":"from cinder import flags"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fenc%3D","line":32,"updated":"2013-01-21 07:03:31.000000000","message":"newline here","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":29,"context_line":"                          :class:`manager.Manager` (default:"},{"line_number":30,"context_line":"                          :class:`cinder.backup.manager.Manager`)."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"\"\"\""},{"line_number":33,"context_line":"from cinder import context"},{"line_number":34,"context_line":"from cinder import exception"},{"line_number":35,"context_line":"from cinder import flags"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FcT0%3D","line":32,"in_reply_to":"AAAAM3%2F%2Fenc%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"backup_manager_opts \u003d ["},{"line_number":45,"context_line":"            cfg.StrOpt(\u0027backup_service\u0027,"},{"line_number":46,"context_line":"                       default\u003d\u0027cinder.backup.services.swift\u0027,"},{"line_number":47,"context_line":"                       help\u003d\u0027Service to use for backups.\u0027),"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FenY%3D","line":44,"updated":"2013-01-21 07:03:31.000000000","message":"over-indented","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":41,"context_line":""},{"line_number":42,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"backup_manager_opts \u003d ["},{"line_number":45,"context_line":"            cfg.StrOpt(\u0027backup_service\u0027,"},{"line_number":46,"context_line":"                       default\u003d\u0027cinder.backup.services.swift\u0027,"},{"line_number":47,"context_line":"                       help\u003d\u0027Service to use for backups.\u0027),"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FcTE%3D","line":44,"in_reply_to":"AAAAM3%2F%2FenY%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":42,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"backup_manager_opts \u003d ["},{"line_number":45,"context_line":"            cfg.StrOpt(\u0027backup_service\u0027,"},{"line_number":46,"context_line":"                       default\u003d\u0027cinder.backup.services.swift\u0027,"},{"line_number":47,"context_line":"                       help\u003d\u0027Service to use for backups.\u0027),"},{"line_number":48,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FemY%3D","line":45,"updated":"2013-01-21 07:03:31.000000000","message":"why not just make this like the volume manager...\n\ncinder.backup.services.swift.SwiftBackupService\n\nThat way you don\u0027t need the method get_backup_service and can just use self.service to pass to drivers\u0027 methods.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":42,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"backup_manager_opts \u003d ["},{"line_number":45,"context_line":"            cfg.StrOpt(\u0027backup_service\u0027,"},{"line_number":46,"context_line":"                       default\u003d\u0027cinder.backup.services.swift\u0027,"},{"line_number":47,"context_line":"                       help\u003d\u0027Service to use for backups.\u0027),"},{"line_number":48,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fb9U%3D","line":45,"in_reply_to":"AAAAM3%2F%2FemY%3D","updated":"2013-01-23 18:17:04.000000000","message":"We are following the pattern used by the glance image service which provides a get function to return the image service.\n\nWe will revisit this but would prefer to do this after the initial merge","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        super(BackupManager, self).__init__(service_name\u003d\u0027backup\u0027,"},{"line_number":65,"context_line":"                                            *args, **kwargs)"},{"line_number":66,"context_line":"        self.driver.db \u003d self.db"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def init_host(self):"},{"line_number":69,"context_line":"        \"\"\"Do any initialization that needs to be run if this is a"},{"line_number":70,"context_line":"           standalone service.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fecg%3D","line":67,"updated":"2013-01-21 07:03:31.000000000","message":"no test coverage","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"7cf67af51548289cd7764d1d60c1b74df34923b2","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        super(BackupManager, self).__init__(service_name\u003d\u0027backup\u0027,"},{"line_number":65,"context_line":"                                            *args, **kwargs)"},{"line_number":66,"context_line":"        self.driver.db \u003d self.db"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def init_host(self):"},{"line_number":69,"context_line":"        \"\"\"Do any initialization that needs to be run if this is a"},{"line_number":70,"context_line":"           standalone service.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FZYM%3D","line":67,"in_reply_to":"AAAAM3%2F%2Fauw%3D","updated":"2013-01-27 00:24:29.000000000","message":"From a fresh pull and venv I get:\n\ncinder.backup.manager \n\n139    119    14%   62-68, 74-109, 115-159, 165-219, 226-260","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":64,"context_line":"        super(BackupManager, self).__init__(service_name\u003d\u0027backup\u0027,"},{"line_number":65,"context_line":"                                            *args, **kwargs)"},{"line_number":66,"context_line":"        self.driver.db \u003d self.db"},{"line_number":67,"context_line":""},{"line_number":68,"context_line":"    def init_host(self):"},{"line_number":69,"context_line":"        \"\"\"Do any initialization that needs to be run if this is a"},{"line_number":70,"context_line":"           standalone service.\"\"\""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fauw%3D","line":67,"in_reply_to":"AAAAM3%2F%2Fecg%3D","updated":"2013-01-23 18:17:04.000000000","message":"./run_tests -c reports 100% test coverage for the backup manager. \n\nThere is a unit test in cinder/tests/test_backup.py called test_init_host","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            if volume[\u0027status\u0027] \u003d\u003d \u0027backing-up\u0027:"},{"line_number":80,"context_line":"                LOG.info(_(\u0027Resetting volume %s to available \u0027"},{"line_number":81,"context_line":"                           \u0027(was backing-up)\u0027) % volume[\u0027id\u0027])"},{"line_number":82,"context_line":"                self.volume_manager.detach_volume(ctxt, volume[\u0027id\u0027])"},{"line_number":83,"context_line":"                self.db.volume_update(ctxt, volume[\u0027id\u0027],"},{"line_number":84,"context_line":"                                      {\u0027status\u0027: \u0027available\u0027})"},{"line_number":85,"context_line":"            if volume[\u0027status\u0027] \u003d\u003d \u0027restoring-backup\u0027:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FenU%3D","line":82,"updated":"2013-01-21 07:03:31.000000000","message":"setting to available is already handled by volume manager.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":79,"context_line":"            if volume[\u0027status\u0027] \u003d\u003d \u0027backing-up\u0027:"},{"line_number":80,"context_line":"                LOG.info(_(\u0027Resetting volume %s to available \u0027"},{"line_number":81,"context_line":"                           \u0027(was backing-up)\u0027) % volume[\u0027id\u0027])"},{"line_number":82,"context_line":"                self.volume_manager.detach_volume(ctxt, volume[\u0027id\u0027])"},{"line_number":83,"context_line":"                self.db.volume_update(ctxt, volume[\u0027id\u0027],"},{"line_number":84,"context_line":"                                      {\u0027status\u0027: \u0027available\u0027})"},{"line_number":85,"context_line":"            if volume[\u0027status\u0027] \u003d\u003d \u0027restoring-backup\u0027:"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fb6o%3D","line":82,"in_reply_to":"AAAAM3%2F%2FenU%3D","updated":"2013-01-23 18:17:04.000000000","message":"Agreed. Call to self.db.volume_update removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            if volume[\u0027status\u0027] \u003d\u003d \u0027restoring-backup\u0027:"},{"line_number":86,"context_line":"                LOG.info(_(\u0027Resetting volume %s to error_restoring \u0027"},{"line_number":87,"context_line":"                           \u0027(was restoring-backup)\u0027) % volume[\u0027id\u0027])"},{"line_number":88,"context_line":"                self.volume_manager.detach_volume(ctxt, volume[\u0027id\u0027])"},{"line_number":89,"context_line":"                self.db.volume_update(ctxt, volume[\u0027id\u0027],"},{"line_number":90,"context_line":"                                      {\u0027status\u0027: \u0027error_restoring\u0027})"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FenM%3D","line":88,"updated":"2013-01-21 07:03:31.000000000","message":"setting to available is already handled by the volume manager.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            if volume[\u0027status\u0027] \u003d\u003d \u0027restoring-backup\u0027:"},{"line_number":86,"context_line":"                LOG.info(_(\u0027Resetting volume %s to error_restoring \u0027"},{"line_number":87,"context_line":"                           \u0027(was restoring-backup)\u0027) % volume[\u0027id\u0027])"},{"line_number":88,"context_line":"                self.volume_manager.detach_volume(ctxt, volume[\u0027id\u0027])"},{"line_number":89,"context_line":"                self.db.volume_update(ctxt, volume[\u0027id\u0027],"},{"line_number":90,"context_line":"                                      {\u0027status\u0027: \u0027error_restoring\u0027})"},{"line_number":91,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fb6g%3D","line":88,"in_reply_to":"AAAAM3%2F%2FenM%3D","updated":"2013-01-23 18:17:04.000000000","message":"Resetting the volume to the \u0027available\u0027 state may not be a good idea in this case. \nThe volume is in an unknown state, most likely it contains garbage since the backup restore did not complete successfully.\nIf we set the volume to the \u0027available\u0027 state this could result in the user being billed for the volume in an OpenStack deployment. Furthermore the user may not be aware the volume exists. The volume may have been created by the backup service if no volume was specified by the user when they submitted the restore request.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            if backup[\u0027status\u0027] \u003d\u003d \u0027deleting\u0027:"},{"line_number":108,"context_line":"                LOG.info(_(\u0027Resuming delete on backup: %s\u0027) % backup[\u0027id\u0027])"},{"line_number":109,"context_line":"                self.delete_backup(ctxt, backup[\u0027id\u0027])"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def create_backup(self, context, backup_id):"},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        Create volume backups using configured backup service."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fecc%3D","line":110,"updated":"2013-01-21 07:03:31.000000000","message":"no test coverage","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"7cf67af51548289cd7764d1d60c1b74df34923b2","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            if backup[\u0027status\u0027] \u003d\u003d \u0027deleting\u0027:"},{"line_number":108,"context_line":"                LOG.info(_(\u0027Resuming delete on backup: %s\u0027) % backup[\u0027id\u0027])"},{"line_number":109,"context_line":"                self.delete_backup(ctxt, backup[\u0027id\u0027])"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def create_backup(self, context, backup_id):"},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        Create volume backups using configured backup service."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FZYI%3D","line":110,"in_reply_to":"AAAAM3%2F%2FauA%3D","updated":"2013-01-27 00:24:29.000000000","message":"From a fresh pull and venv I get:\n\ncinder.backup.manager \n\n139    119    14%   62-68, 74-109, 115-159, 165-219, 226-260","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":107,"context_line":"            if backup[\u0027status\u0027] \u003d\u003d \u0027deleting\u0027:"},{"line_number":108,"context_line":"                LOG.info(_(\u0027Resuming delete on backup: %s\u0027) % backup[\u0027id\u0027])"},{"line_number":109,"context_line":"                self.delete_backup(ctxt, backup[\u0027id\u0027])"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def create_backup(self, context, backup_id):"},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        Create volume backups using configured backup service."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FauA%3D","line":110,"in_reply_to":"AAAAM3%2F%2Fecc%3D","updated":"2013-01-23 18:17:04.000000000","message":"./run_tests -c reports 100% test coverage for the backup manager. \n\nThere are a number of unit tests in cinder/tests/test_backup.py for create_backup","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        volume_id \u003d backup[\u0027volume_id\u0027]"},{"line_number":117,"context_line":"        volume \u003d self.db.volume_get(context, volume_id)"},{"line_number":118,"context_line":"        LOG.debug(_(\u0027create_backup started, backup: %(backup_id)s for \u0027"},{"line_number":119,"context_line":"                    \u0027volume: %(volume_id)s\u0027) % locals())"},{"line_number":120,"context_line":"        self.db.backup_update(context, backup_id, {\u0027host\u0027: self.host})"},{"line_number":121,"context_line":"        self.db.backup_update(context, backup_id,"},{"line_number":122,"context_line":"                              {\u0027service\u0027: FLAGS.backup_service})"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fem8%3D","line":119,"updated":"2013-01-21 07:03:31.000000000","message":"Instead of hitting the db twice, do one update for host and service.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        volume_id \u003d backup[\u0027volume_id\u0027]"},{"line_number":117,"context_line":"        volume \u003d self.db.volume_get(context, volume_id)"},{"line_number":118,"context_line":"        LOG.debug(_(\u0027create_backup started, backup: %(backup_id)s for \u0027"},{"line_number":119,"context_line":"                    \u0027volume: %(volume_id)s\u0027) % locals())"},{"line_number":120,"context_line":"        self.db.backup_update(context, backup_id, {\u0027host\u0027: self.host})"},{"line_number":121,"context_line":"        self.db.backup_update(context, backup_id,"},{"line_number":122,"context_line":"                              {\u0027service\u0027: FLAGS.backup_service})"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fat8%3D","line":119,"in_reply_to":"AAAAM3%2F%2Fem8%3D","updated":"2013-01-23 18:17:04.000000000","message":"Fixed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                                                   \u0027availability_zone\u0027:"},{"line_number":158,"context_line":"                                                   self.az})"},{"line_number":159,"context_line":"        LOG.debug(_(\u0027create_backup finished. backup: %s\u0027), backup_id)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def restore_backup(self, context, backup_id, volume_id):"},{"line_number":162,"context_line":"        \"\"\""},{"line_number":163,"context_line":"        Restore volume backups from configured backup service."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FecY%3D","line":160,"updated":"2013-01-21 07:03:31.000000000","message":"no test coverage","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"7cf67af51548289cd7764d1d60c1b74df34923b2","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                                                   \u0027availability_zone\u0027:"},{"line_number":158,"context_line":"                                                   self.az})"},{"line_number":159,"context_line":"        LOG.debug(_(\u0027create_backup finished. backup: %s\u0027), backup_id)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def restore_backup(self, context, backup_id, volume_id):"},{"line_number":162,"context_line":"        \"\"\""},{"line_number":163,"context_line":"        Restore volume backups from configured backup service."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FZYE%3D","line":160,"in_reply_to":"AAAAM3%2F%2Fat4%3D","updated":"2013-01-27 00:24:29.000000000","message":"Weird, from a fresh pull and venv I get:\n\ncinder.backup.manager \n\n139    119    14%   62-68, 74-109, 115-159, 165-219, 226-260","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                                                   \u0027availability_zone\u0027:"},{"line_number":158,"context_line":"                                                   self.az})"},{"line_number":159,"context_line":"        LOG.debug(_(\u0027create_backup finished. backup: %s\u0027), backup_id)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def restore_backup(self, context, backup_id, volume_id):"},{"line_number":162,"context_line":"        \"\"\""},{"line_number":163,"context_line":"        Restore volume backups from configured backup service."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fat4%3D","line":160,"in_reply_to":"AAAAM3%2F%2FecY%3D","updated":"2013-01-23 18:17:04.000000000","message":"./run_tests -c reports 100% test coverage for the backup manager. \n\nThere are a number of unit tests in cinder/tests/test_backup.py for restore_backup","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            err \u003d _(\u0027restore_backup aborted, expected backup status \u0027"},{"line_number":183,"context_line":"                    \u0027%(expected_status)s but got %(actual_status)s\u0027) % locals()"},{"line_number":184,"context_line":"            self.db.backup_update(context, backup_id, {\u0027status\u0027: \u0027error\u0027,"},{"line_number":185,"context_line":"                                                       \u0027fail_reason\u0027: err})"},{"line_number":186,"context_line":"            self.db.volume_update(context, volume_id, {\u0027status\u0027: \u0027error\u0027})"},{"line_number":187,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Femo%3D","line":185,"updated":"2013-01-21 07:03:31.000000000","message":"Since backup api was expecting the volume to be at an available status at the start, can\u0027t we just make it available again since we didn\u0027t touch it?","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"838afd200d6d01ad811f4fb612093b3cdcf34006","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            err \u003d _(\u0027restore_backup aborted, expected backup status \u0027"},{"line_number":183,"context_line":"                    \u0027%(expected_status)s but got %(actual_status)s\u0027) % locals()"},{"line_number":184,"context_line":"            self.db.backup_update(context, backup_id, {\u0027status\u0027: \u0027error\u0027,"},{"line_number":185,"context_line":"                                                       \u0027fail_reason\u0027: err})"},{"line_number":186,"context_line":"            self.db.volume_update(context, volume_id, {\u0027status\u0027: \u0027error\u0027})"},{"line_number":187,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FNbc%3D","line":185,"in_reply_to":"AAAAM3%2F%2FP5Y%3D","updated":"2013-02-04 05:34:15.000000000","message":"They created the volume at the beginning is my point. The user is aware they will be billed for that volume. They passed the volume id of the volume they created to the restore rest api call. I don\u0027t think the volume should be in an error state just because the expected state wasn\u0027t the actual state. I agree it makes sense for the case of not passing a volume to restore to, but I\u0027m still unsure of latter case. I agree that there needs to be some discussion around this as well.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"9770e09229c8f0968cf1f14408a5ad605de2a9b6","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            err \u003d _(\u0027restore_backup aborted, expected backup status \u0027"},{"line_number":183,"context_line":"                    \u0027%(expected_status)s but got %(actual_status)s\u0027) % locals()"},{"line_number":184,"context_line":"            self.db.backup_update(context, backup_id, {\u0027status\u0027: \u0027error\u0027,"},{"line_number":185,"context_line":"                                                       \u0027fail_reason\u0027: err})"},{"line_number":186,"context_line":"            self.db.volume_update(context, volume_id, {\u0027status\u0027: \u0027error\u0027})"},{"line_number":187,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FP5Y%3D","line":185,"in_reply_to":"AAAAM3%2F%2FWPA%3D","updated":"2013-01-31 18:52:10.000000000","message":"If we don\u0027t set the volume to the error state then it could give the user the impression that the restore worked since the volume will be marked as available. Also the user is potentially billed for a volume which they created to restore a backup to and which does not contain that restored backup.\n\nI agree there is some discussion needed around this. I propose that we open a bug against the code to track the issue and resolve it post merge.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"7cf67af51548289cd7764d1d60c1b74df34923b2","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            err \u003d _(\u0027restore_backup aborted, expected backup status \u0027"},{"line_number":183,"context_line":"                    \u0027%(expected_status)s but got %(actual_status)s\u0027) % locals()"},{"line_number":184,"context_line":"            self.db.backup_update(context, backup_id, {\u0027status\u0027: \u0027error\u0027,"},{"line_number":185,"context_line":"                                                       \u0027fail_reason\u0027: err})"},{"line_number":186,"context_line":"            self.db.volume_update(context, volume_id, {\u0027status\u0027: \u0027error\u0027})"},{"line_number":187,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FWPA%3D","line":185,"in_reply_to":"AAAAM3%2F%2Fats%3D","updated":"2013-01-27 00:24:29.000000000","message":"That sounds valid, however, what about for the case where the volume already existed and was passed in rest call and was not created by cinder.api.backup.restore?","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            err \u003d _(\u0027restore_backup aborted, expected backup status \u0027"},{"line_number":183,"context_line":"                    \u0027%(expected_status)s but got %(actual_status)s\u0027) % locals()"},{"line_number":184,"context_line":"            self.db.backup_update(context, backup_id, {\u0027status\u0027: \u0027error\u0027,"},{"line_number":185,"context_line":"                                                       \u0027fail_reason\u0027: err})"},{"line_number":186,"context_line":"            self.db.volume_update(context, volume_id, {\u0027status\u0027: \u0027error\u0027})"},{"line_number":187,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":188,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fats%3D","line":185,"in_reply_to":"AAAAM3%2F%2Femo%3D","updated":"2013-01-23 18:17:04.000000000","message":"If we set the volume to the available state the user may be billed for the volume even though the backup restore failed.\nAlso, the user may not be aware the volume exists. The volume may have been created by the backup service if no volume was specified by the user when they submitted the restore request.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                    \u0027 configured [%(configured_service)s] is not the\u0027"},{"line_number":200,"context_line":"                    \u0027 backup service that was used to create this\u0027"},{"line_number":201,"context_line":"                    \u0027 backup [%(backup_service)s]\u0027) % locals()"},{"line_number":202,"context_line":"            self.db.backup_update(context, backup_id, {\u0027status\u0027: \u0027available\u0027})"},{"line_number":203,"context_line":"            self.db.volume_update(context, volume_id, {\u0027status\u0027: \u0027error\u0027})"},{"line_number":204,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Femk%3D","line":202,"updated":"2013-01-21 07:03:31.000000000","message":"Since backup api was expecting the volume to be at an available status at the start, can\u0027t we just make it available again since we didn\u0027t touch it?","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"9770e09229c8f0968cf1f14408a5ad605de2a9b6","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                    \u0027 configured [%(configured_service)s] is not the\u0027"},{"line_number":200,"context_line":"                    \u0027 backup service that was used to create this\u0027"},{"line_number":201,"context_line":"                    \u0027 backup [%(backup_service)s]\u0027) % locals()"},{"line_number":202,"context_line":"            self.db.backup_update(context, backup_id, {\u0027status\u0027: \u0027available\u0027})"},{"line_number":203,"context_line":"            self.db.volume_update(context, volume_id, {\u0027status\u0027: \u0027error\u0027})"},{"line_number":204,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FP5U%3D","line":202,"in_reply_to":"AAAAM3%2F%2FWO8%3D","updated":"2013-01-31 18:52:10.000000000","message":"If we don\u0027t set the volume to the error state then it could give the user the impression that the restore worked since the volume will be marked as available. Also the user is potentially billed for a volume which they created to restore a backup to and which does not contain that restored backup.\n\nI agree there is some discussion needed around this. I propose that we open a bug against the code to track the issue and resolve it post merge.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"7cf67af51548289cd7764d1d60c1b74df34923b2","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                    \u0027 configured [%(configured_service)s] is not the\u0027"},{"line_number":200,"context_line":"                    \u0027 backup service that was used to create this\u0027"},{"line_number":201,"context_line":"                    \u0027 backup [%(backup_service)s]\u0027) % locals()"},{"line_number":202,"context_line":"            self.db.backup_update(context, backup_id, {\u0027status\u0027: \u0027available\u0027})"},{"line_number":203,"context_line":"            self.db.volume_update(context, volume_id, {\u0027status\u0027: \u0027error\u0027})"},{"line_number":204,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FWO8%3D","line":202,"in_reply_to":"AAAAM3%2F%2Fatk%3D","updated":"2013-01-27 00:24:29.000000000","message":"That sounds valid, however, what about for the case where the volume already existed and was passed in rest call and was not created by cinder.api.backup.restore?","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":199,"context_line":"                    \u0027 configured [%(configured_service)s] is not the\u0027"},{"line_number":200,"context_line":"                    \u0027 backup service that was used to create this\u0027"},{"line_number":201,"context_line":"                    \u0027 backup [%(backup_service)s]\u0027) % locals()"},{"line_number":202,"context_line":"            self.db.backup_update(context, backup_id, {\u0027status\u0027: \u0027available\u0027})"},{"line_number":203,"context_line":"            self.db.volume_update(context, volume_id, {\u0027status\u0027: \u0027error\u0027})"},{"line_number":204,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":205,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fatk%3D","line":202,"in_reply_to":"AAAAM3%2F%2Femk%3D","updated":"2013-01-23 18:17:04.000000000","message":"If we set the volume to the available state the user may be billed for the volume even though the backup restore failed.\nAlso, the user may not be aware the volume exists. The volume may have been created by the backup service if no volume was specified by the user when they submitted the restore request.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        self.db.backup_update(context, backup_id, {\u0027status\u0027: \u0027available\u0027})"},{"line_number":219,"context_line":"        LOG.debug(_(\u0027restore_backup finished, backup: %(backup_id)s restored\u0027"},{"line_number":220,"context_line":"                    \u0027 to volume: %(volume_id)s\u0027) % locals())"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def delete_backup(self, context, backup_id):"},{"line_number":223,"context_line":"        \"\"\""},{"line_number":224,"context_line":"        Delete volume backup from configured backup service."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FecU%3D","line":221,"updated":"2013-01-21 07:03:31.000000000","message":"no test coverage","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"7cf67af51548289cd7764d1d60c1b74df34923b2","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        self.db.backup_update(context, backup_id, {\u0027status\u0027: \u0027available\u0027})"},{"line_number":219,"context_line":"        LOG.debug(_(\u0027restore_backup finished, backup: %(backup_id)s restored\u0027"},{"line_number":220,"context_line":"                    \u0027 to volume: %(volume_id)s\u0027) % locals())"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def delete_backup(self, context, backup_id):"},{"line_number":223,"context_line":"        \"\"\""},{"line_number":224,"context_line":"        Delete volume backup from configured backup service."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FZXs%3D","line":221,"in_reply_to":"AAAAM3%2F%2Fat0%3D","updated":"2013-01-27 00:24:29.000000000","message":"Weird, from a fresh pull and venv I get:\n\ncinder.backup.manager \n\n139    119    14%   62-68, 74-109, 115-159, 165-219, 226-260","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":218,"context_line":"        self.db.backup_update(context, backup_id, {\u0027status\u0027: \u0027available\u0027})"},{"line_number":219,"context_line":"        LOG.debug(_(\u0027restore_backup finished, backup: %(backup_id)s restored\u0027"},{"line_number":220,"context_line":"                    \u0027 to volume: %(volume_id)s\u0027) % locals())"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def delete_backup(self, context, backup_id):"},{"line_number":223,"context_line":"        \"\"\""},{"line_number":224,"context_line":"        Delete volume backup from configured backup service."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fat0%3D","line":221,"in_reply_to":"AAAAM3%2F%2FecU%3D","updated":"2013-01-23 18:17:04.000000000","message":"./run_tests -c reports 100% test coverage for the backup manager. \n\nThere are a number of unit tests in cinder/tests/test_backup.py for delete_backup","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"12ee7a6d3cd3464e3c11f5a6f165ab2a7848545c","unresolved":false,"context_lines":[{"line_number":67,"context_line":"                                            *args, **kwargs)"},{"line_number":68,"context_line":"        self.driver.db \u003d self.db"},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def init_host(self):"},{"line_number":71,"context_line":"        \"\"\"Do any initialization that needs to be run if this is a"},{"line_number":72,"context_line":"           standalone service.\"\"\""},{"line_number":73,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2FMZk%3D","line":70,"updated":"2013-02-04 05:47:56.000000000","message":"Weird, from a fresh pull and venv I get:\ncinder.backup.manager\n139 119 14% 62-68, 74-109, 115-159, 165-219, 226-260","commit_id":"d86711045e845f9cf0bca149c74ad29148efce71"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"12ee7a6d3cd3464e3c11f5a6f165ab2a7848545c","unresolved":false,"context_lines":[{"line_number":108,"context_line":"                LOG.info(_(\u0027Resuming delete on backup: %s\u0027) % backup[\u0027id\u0027])"},{"line_number":109,"context_line":"                self.delete_backup(ctxt, backup[\u0027id\u0027])"},{"line_number":110,"context_line":""},{"line_number":111,"context_line":"    def create_backup(self, context, backup_id):"},{"line_number":112,"context_line":"        \"\"\""},{"line_number":113,"context_line":"        Create volume backups using configured backup service."},{"line_number":114,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2FMZ4%3D","line":111,"updated":"2013-02-04 05:47:56.000000000","message":"From a fresh pull and venv I get:\ncinder.backup.manager\n139 119 14% 62-68, 74-109, 115-159, 165-219, 226-260","commit_id":"d86711045e845f9cf0bca149c74ad29148efce71"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"12ee7a6d3cd3464e3c11f5a6f165ab2a7848545c","unresolved":false,"context_lines":[{"line_number":158,"context_line":"                                                   self.az})"},{"line_number":159,"context_line":"        LOG.debug(_(\u0027create_backup finished. backup: %s\u0027), backup_id)"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    def restore_backup(self, context, backup_id, volume_id):"},{"line_number":162,"context_line":"        \"\"\""},{"line_number":163,"context_line":"        Restore volume backups from configured backup service."},{"line_number":164,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2FMZ0%3D","line":161,"updated":"2013-02-04 05:47:56.000000000","message":"Weird, from a fresh pull and venv I get:\ncinder.backup.manager\n139 119 14% 62-68, 74-109, 115-159, 165-219, 226-260","commit_id":"d86711045e845f9cf0bca149c74ad29148efce71"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"c31f70124277b51c8460d48add8d924df2d69f85","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        self.db.backup_update(context, backup_id, {\u0027host\u0027: self.host})"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        expected_status \u003d \u0027restoring-backup\u0027"},{"line_number":172,"context_line":"        actual_status \u003d volume[\u0027status\u0027]"},{"line_number":173,"context_line":"        if actual_status !\u003d expected_status:"},{"line_number":174,"context_line":"            err \u003d _(\u0027restore_backup aborted, expected volume status \u0027"},{"line_number":175,"context_line":"                    \u0027%(expected_status)s but got %(actual_status)s\u0027) % locals()"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2FLnc%3D","line":172,"updated":"2013-02-04 17:39:07.000000000","message":"So I\u0027ve been following the conversation on this and the more I think about it the more questions I have :)\n\nI guess I don\u0027t necessarily see the value in having the API check for available status, and then turning around and updating the status, just in order to have the manager here check that status again?  Even \"double\" checking on \u0027available\u0027 seems more logical IMO, but not sure I see the logic here.\n\nIf you go this route, it\u0027s OK (although it still seems kind of odd to me), but one thing that might be good is to introduce some metadata in the case of the auto created dest volume, and just auto-delete it if things fail here.","commit_id":"d86711045e845f9cf0bca149c74ad29148efce71"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"791a3aa96320d3b69d6bc7102f0c6851207a0048","unresolved":false,"context_lines":[{"line_number":169,"context_line":"        self.db.backup_update(context, backup_id, {\u0027host\u0027: self.host})"},{"line_number":170,"context_line":""},{"line_number":171,"context_line":"        expected_status \u003d \u0027restoring-backup\u0027"},{"line_number":172,"context_line":"        actual_status \u003d volume[\u0027status\u0027]"},{"line_number":173,"context_line":"        if actual_status !\u003d expected_status:"},{"line_number":174,"context_line":"            err \u003d _(\u0027restore_backup aborted, expected volume status \u0027"},{"line_number":175,"context_line":"                    \u0027%(expected_status)s but got %(actual_status)s\u0027) % locals()"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2FLbo%3D","line":172,"in_reply_to":"AAAAM3%2F%2FLnc%3D","updated":"2013-02-04 18:40:46.000000000","message":"Discussed the with John and cleared it up. Summary:\n\nIf the API leaves the volume \u0027available\u0027, then it can get attached before the restore is done. This would be bad.\n\nNo change required.","commit_id":"d86711045e845f9cf0bca149c74ad29148efce71"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"12ee7a6d3cd3464e3c11f5a6f165ab2a7848545c","unresolved":false,"context_lines":[{"line_number":183,"context_line":"                    \u0027%(expected_status)s but got %(actual_status)s\u0027) % locals()"},{"line_number":184,"context_line":"            self.db.backup_update(context, backup_id, {\u0027status\u0027: \u0027error\u0027,"},{"line_number":185,"context_line":"                                                       \u0027fail_reason\u0027: err})"},{"line_number":186,"context_line":"            self.db.volume_update(context, volume_id, {\u0027status\u0027: \u0027error\u0027})"},{"line_number":187,"context_line":"            raise exception.InvalidBackup(reason\u003derr)"},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"        if volume[\u0027size\u0027] \u003e backup[\u0027size\u0027]:"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2FMZw%3D","line":186,"updated":"2013-02-04 05:47:56.000000000","message":"(cont from patchset 12): They created the volume at the beginning is my point. The user is aware they will be billed for that volume. They passed the volume id of the volume they created to the restore rest api call. I don\u0027t think the volume should be in an error state just because the expected state wasn\u0027t the actual state. I agree it makes sense for the case of not passing a volume to restore to, but I\u0027m still unsure of latter case. I agree that there needs to be some discussion around this as well.","commit_id":"d86711045e845f9cf0bca149c74ad29148efce71"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"12ee7a6d3cd3464e3c11f5a6f165ab2a7848545c","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        LOG.debug(_(\u0027restore_backup finished, backup: %(backup_id)s restored\u0027"},{"line_number":220,"context_line":"                    \u0027 to volume: %(volume_id)s\u0027) % locals())"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    def delete_backup(self, context, backup_id):"},{"line_number":223,"context_line":"        \"\"\""},{"line_number":224,"context_line":"        Delete volume backup from configured backup service."},{"line_number":225,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2FMZs%3D","line":222,"updated":"2013-02-04 05:47:56.000000000","message":"Weird, from a fresh pull and venv I get:\ncinder.backup.manager\n139 119 14% 62-68, 74-109, 115-159, 165-219, 226-260","commit_id":"d86711045e845f9cf0bca149c74ad29148efce71"}],"cinder/backup/rpcapi.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":"Client side of the volume backup RPC API."},{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cinder import exception"},{"line_number":23,"context_line":"from cinder import flags"},{"line_number":24,"context_line":"from cinder.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FemU%3D","line":21,"updated":"2013-01-21 07:03:31.000000000","message":"exception not used.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":"Client side of the volume backup RPC API."},{"line_number":20,"context_line":"\"\"\""},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"from cinder import exception"},{"line_number":23,"context_line":"from cinder import flags"},{"line_number":24,"context_line":"from cinder.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fb4o%3D","line":21,"in_reply_to":"AAAAM3%2F%2FemU%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"}],"cinder/backup/services/swift.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f5f245c6d497ae937ffb850788c24bbc1cb45054","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        volume_size \u003d volume[\u0027size\u0027]"},{"line_number":298,"context_line":"        backup_size \u003d backup[\u0027size\u0027]"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        if volume_size \u003c backup_size:"},{"line_number":301,"context_line":"            err \u003d _(\u0027volume size %(volume_size)d is too small to restore \u0027"},{"line_number":302,"context_line":"                    \u0027backup of size %(backup_size)d.\u0027) % locals()"},{"line_number":303,"context_line":"            self.db.backup_update(self.context, backup_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FhTk%3D","line":300,"updated":"2013-01-17 15:37:13.000000000","message":"This is checked in the API server, right?","commit_id":"73136f08302c030a6f4de44225385b67f751a12b"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"648436c179b0804cc06b26037d94890fde484c4d","unresolved":false,"context_lines":[{"line_number":297,"context_line":"        volume_size \u003d volume[\u0027size\u0027]"},{"line_number":298,"context_line":"        backup_size \u003d backup[\u0027size\u0027]"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        if volume_size \u003c backup_size:"},{"line_number":301,"context_line":"            err \u003d _(\u0027volume size %(volume_size)d is too small to restore \u0027"},{"line_number":302,"context_line":"                    \u0027backup of size %(backup_size)d.\u0027) % locals()"},{"line_number":303,"context_line":"            self.db.backup_update(self.context, backup_id,"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Ff3k%3D","line":300,"in_reply_to":"AAAAM3%2F%2FhTk%3D","updated":"2013-01-18 16:39:33.000000000","message":"Agreed. Moved this check out of here and into cinder/backup/api.py.\nThis check should be a function of the manager and not the service","commit_id":"73136f08302c030a6f4de44225385b67f751a12b"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f5f245c6d497ae937ffb850788c24bbc1cb45054","unresolved":false,"context_lines":[{"line_number":347,"context_line":"            # force flush every write to avoid long blocking write on close"},{"line_number":348,"context_line":"            volume_file.flush()"},{"line_number":349,"context_line":"            os.fsync(volume_file.fileno())"},{"line_number":350,"context_line":"            eventlet.sleep(0)"},{"line_number":351,"context_line":"        LOG.debug(_(\u0027restore %(backup_id)s to %(volume_id)s finished.\u0027) %"},{"line_number":352,"context_line":"                  locals())"},{"line_number":353,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FhTQ%3D","line":350,"updated":"2013-01-17 15:37:13.000000000","message":"What is this for?  If it\u0027s on purpose, maybe add a comment?","commit_id":"73136f08302c030a6f4de44225385b67f751a12b"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"648436c179b0804cc06b26037d94890fde484c4d","unresolved":false,"context_lines":[{"line_number":347,"context_line":"            # force flush every write to avoid long blocking write on close"},{"line_number":348,"context_line":"            volume_file.flush()"},{"line_number":349,"context_line":"            os.fsync(volume_file.fileno())"},{"line_number":350,"context_line":"            eventlet.sleep(0)"},{"line_number":351,"context_line":"        LOG.debug(_(\u0027restore %(backup_id)s to %(volume_id)s finished.\u0027) %"},{"line_number":352,"context_line":"                  locals())"},{"line_number":353,"context_line":""}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Ff3M%3D","line":350,"in_reply_to":"AAAAM3%2F%2FhTQ%3D","updated":"2013-01-18 16:39:33.000000000","message":"Comment added. Yield is on purpose. Restoring and deleting backups can take some time so we yield to allow other threads in.","commit_id":"73136f08302c030a6f4de44225385b67f751a12b"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f5f245c6d497ae937ffb850788c24bbc1cb45054","unresolved":false,"context_lines":[{"line_number":374,"context_line":"                else:"},{"line_number":375,"context_line":"                    LOG.debug(_(\u0027deleted swift object: %(swift_object_name)s\u0027"},{"line_number":376,"context_line":"                                \u0027 in container: %(container)s\u0027) % locals())"},{"line_number":377,"context_line":"                eventlet.sleep(0)"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"        self.context \u003d self.context.elevated()"},{"line_number":380,"context_line":"        LOG.debug(_(\u0027delete %s finished\u0027) % backup[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FhS8%3D","line":377,"updated":"2013-01-17 15:37:13.000000000","message":"same as above","commit_id":"73136f08302c030a6f4de44225385b67f751a12b"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"648436c179b0804cc06b26037d94890fde484c4d","unresolved":false,"context_lines":[{"line_number":374,"context_line":"                else:"},{"line_number":375,"context_line":"                    LOG.debug(_(\u0027deleted swift object: %(swift_object_name)s\u0027"},{"line_number":376,"context_line":"                                \u0027 in container: %(container)s\u0027) % locals())"},{"line_number":377,"context_line":"                eventlet.sleep(0)"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"        self.context \u003d self.context.elevated()"},{"line_number":380,"context_line":"        LOG.debug(_(\u0027delete %s finished\u0027) % backup[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Ff3I%3D","line":377,"in_reply_to":"AAAAM3%2F%2FhS8%3D","updated":"2013-01-18 16:39:33.000000000","message":"As above. Comment added","commit_id":"73136f08302c030a6f4de44225385b67f751a12b"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                               None (to disable), zlib and bz2 (default: zlib)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"import eventlet"},{"line_number":36,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FemM%3D","line":33,"updated":"2013-01-21 07:03:31.000000000","message":"only one newline","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":30,"context_line":"                               None (to disable), zlib and bz2 (default: zlib)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"\"\"\""},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"import eventlet"},{"line_number":36,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fb4c%3D","line":33,"in_reply_to":"AAAAM3%2F%2FemM%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":45,"context_line":"from cinder.openstack.common import cfg"},{"line_number":46,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":47,"context_line":"from cinder.openstack.common import timeutils"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"from swiftclient import client as swift"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FemI%3D","line":48,"updated":"2013-01-21 07:03:31.000000000","message":"Should be in second group of imports according to hacking file.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":45,"context_line":"from cinder.openstack.common import cfg"},{"line_number":46,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":47,"context_line":"from cinder.openstack.common import timeutils"},{"line_number":48,"context_line":""},{"line_number":49,"context_line":"from swiftclient import client as swift"},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fb4A%3D","line":48,"in_reply_to":"AAAAM3%2F%2FemI%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"c508e00fc63268ab4cabfab26c96da57af02d7d4","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            # Restoring a backup to a volume can take some time. Yield so other"},{"line_number":317,"context_line":"            # threads can run, allowing for among other things the service"},{"line_number":318,"context_line":"            # status to be updated"},{"line_number":319,"context_line":"            eventlet.sleep(0)"},{"line_number":320,"context_line":"        LOG.debug(_(\u0027restore %(backup_id)s to %(volume_id)s finished.\u0027) %"},{"line_number":321,"context_line":"                  locals())"},{"line_number":322,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FefA%3D","line":319,"updated":"2013-01-20 15:19:21.000000000","message":"Maybe this (and the other yields) should be in the manager?  Other drivers may forget - maybe it\u0027s worth doing it one level above?","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            # Restoring a backup to a volume can take some time. Yield so other"},{"line_number":317,"context_line":"            # threads can run, allowing for among other things the service"},{"line_number":318,"context_line":"            # status to be updated"},{"line_number":319,"context_line":"            eventlet.sleep(0)"},{"line_number":320,"context_line":"        LOG.debug(_(\u0027restore %(backup_id)s to %(volume_id)s finished.\u0027) %"},{"line_number":321,"context_line":"                  locals())"},{"line_number":322,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fas8%3D","line":319,"in_reply_to":"AAAAM3%2F%2FefA%3D","updated":"2013-01-23 18:17:04.000000000","message":"Having the yield in the driver is more effective than having it in the manager.\nBackup create, restore and delete operations are processed in chunks by the driver. Having the sleep in the driver allows us to yield after each chunk. If the sleep is moved into the manager we would only yield after each whole completed create, restore or delete operation.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                # Deleting a backup\u0027s objects from swift can take some time."},{"line_number":347,"context_line":"                # Yield so other threads can run"},{"line_number":348,"context_line":"                eventlet.sleep(0)"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        self.context \u003d self.context.elevated()"},{"line_number":351,"context_line":"        LOG.debug(_(\u0027delete %s finished\u0027) % backup[\u0027id\u0027])"},{"line_number":352,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FekY%3D","line":349,"updated":"2013-01-21 07:03:31.000000000","message":"why are we elevating context here?","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":346,"context_line":"                # Deleting a backup\u0027s objects from swift can take some time."},{"line_number":347,"context_line":"                # Yield so other threads can run"},{"line_number":348,"context_line":"                eventlet.sleep(0)"},{"line_number":349,"context_line":""},{"line_number":350,"context_line":"        self.context \u003d self.context.elevated()"},{"line_number":351,"context_line":"        LOG.debug(_(\u0027delete %s finished\u0027) % backup[\u0027id\u0027])"},{"line_number":352,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fass%3D","line":349,"in_reply_to":"AAAAM3%2F%2FekY%3D","updated":"2013-01-23 18:17:04.000000000","message":"Shouldn\u0027t be in there at all. Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":866,"name":"Chmouel Boudjnah","email":"chmouel@chmouel.com","username":"chmouel"},"change_message_id":"012b0ab785b39a7e775f7d410e1784c21f16831a","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def __init__(self, context, db_driver\u003dNone):"},{"line_number":97,"context_line":"        self.context \u003d context"},{"line_number":98,"context_line":"        self.swift_url \u003d \u0027%sAUTH_%s\u0027 % (FLAGS.backup_swift_url,"},{"line_number":99,"context_line":"                                        self.context.project_id)"},{"line_number":100,"context_line":"        self.az \u003d FLAGS.storage_availability_zone"},{"line_number":101,"context_line":"        self.data_block_size_bytes \u003d FLAGS.backup_swift_object_size"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B2Fw%3D","line":98,"updated":"2013-02-17 11:49:47.000000000","message":"AUTH_ as a prefix is not always true, in case we want to mix different auth system (which is often on large swift cluster) this is usually reconfigured.","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"f028eae7cd0d0bc2c519610ec28d1473acf5e0eb","unresolved":false,"context_lines":[{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def __init__(self, context, db_driver\u003dNone):"},{"line_number":97,"context_line":"        self.context \u003d context"},{"line_number":98,"context_line":"        self.swift_url \u003d \u0027%sAUTH_%s\u0027 % (FLAGS.backup_swift_url,"},{"line_number":99,"context_line":"                                        self.context.project_id)"},{"line_number":100,"context_line":"        self.az \u003d FLAGS.storage_availability_zone"},{"line_number":101,"context_line":"        self.data_block_size_bytes \u003d FLAGS.backup_swift_object_size"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2ByDI%3D","line":98,"in_reply_to":"AAAAM3%2F%2B2Fw%3D","updated":"2013-02-19 12:17:10.000000000","message":"I\u0027m sorry, I don\u0027t understand this comment, can you point me at some docs or a longer explanation please?","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":1107,"name":"Josh Durgin","email":"jdurgin@redhat.com","username":"jdurgin"},"change_message_id":"46cf2c8ea4ed01c96d8dcb45422553634fd57e35","unresolved":false,"context_lines":[{"line_number":309,"context_line":""},{"line_number":310,"context_line":"            # force flush every write to avoid long blocking write on close"},{"line_number":311,"context_line":"            volume_file.flush()"},{"line_number":312,"context_line":"            os.fsync(volume_file.fileno())"},{"line_number":313,"context_line":"            # Restoring a backup to a volume can take some time. Yield so other"},{"line_number":314,"context_line":"            # threads can run, allowing for among other things the service"},{"line_number":315,"context_line":"            # status to be updated"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2By9Y%3D","line":312,"updated":"2013-02-19 01:27:09.000000000","message":"This assumes the volume_file object is actually a file on the host. This will not be the case for all backends. Maybe make the flush and fsync conditional on hasattr(volume_file, \u0027fileno\u0027)?","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":6153,"name":"stephen-mulcahy","email":"stephen.mulcahy@hpe.com","username":"stephen-mulcahy"},"change_message_id":"b8e7e49636976baeea201f6c100d7f251a8661f9","unresolved":false,"context_lines":[{"line_number":309,"context_line":""},{"line_number":310,"context_line":"            # force flush every write to avoid long blocking write on close"},{"line_number":311,"context_line":"            volume_file.flush()"},{"line_number":312,"context_line":"            os.fsync(volume_file.fileno())"},{"line_number":313,"context_line":"            # Restoring a backup to a volume can take some time. Yield so other"},{"line_number":314,"context_line":"            # threads can run, allowing for among other things the service"},{"line_number":315,"context_line":"            # status to be updated"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2BxqM%3D","line":312,"in_reply_to":"AAAAM3%2F%2By9Y%3D","updated":"2013-02-19 16:00:28.000000000","message":"The backup service module assumes that the volume_file object is a python File object (with the volume driver having the responsibility to return a File object in whatever way it sees fit). I\u0027d prefer not to make these calls optional until we can see a real test case of the kind you mention, as there will be side effects to removing them (in testing, we saw the absence of these causing long blocking writes on close which in turn led to the backup manager being marked as unavailable by the scheduler and backup requests getting lost).","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"}],"cinder/db/api.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"098fb4143033b42d5599a4ce1ef960974f35243d","unresolved":false,"context_lines":[{"line_number":63,"context_line":"               default\u003d\u0027snapshot-%s\u0027,"},{"line_number":64,"context_line":"               help\u003d\u0027Template string to be used to generate snapshot names\u0027),"},{"line_number":65,"context_line":"    cfg.StrOpt(\u0027backup_name_template\u0027,"},{"line_number":66,"context_line":"               default\u003d\u0027backup-%08x\u0027,"},{"line_number":67,"context_line":"               help\u003d\u0027Template string to be used to generate backup names\u0027), ]"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"FLAGS \u003d flags.FLAGS"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FXtA%3D","line":66,"updated":"2013-01-25 03:42:12.000000000","message":"Why not a string like all the other name_templates?\n\nAlso needs added to sample conf","commit_id":"5e08f0b55fa8fb2e4ad70b27e878d67e457ac3b8"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"801e0483ce9488a751218e8c6839e38e34dd47cd","unresolved":false,"context_lines":[{"line_number":63,"context_line":"               default\u003d\u0027snapshot-%s\u0027,"},{"line_number":64,"context_line":"               help\u003d\u0027Template string to be used to generate snapshot names\u0027),"},{"line_number":65,"context_line":"    cfg.StrOpt(\u0027backup_name_template\u0027,"},{"line_number":66,"context_line":"               default\u003d\u0027backup-%08x\u0027,"},{"line_number":67,"context_line":"               help\u003d\u0027Template string to be used to generate backup names\u0027), ]"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"FLAGS \u003d flags.FLAGS"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FWO4%3D","line":66,"in_reply_to":"AAAAM3%2F%2FXtA%3D","updated":"2013-01-27 00:30:42.000000000","message":"+1","commit_id":"5e08f0b55fa8fb2e4ad70b27e878d67e457ac3b8"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"68f36283f2aac01f115ccd685314e355acce6d0a","unresolved":false,"context_lines":[{"line_number":63,"context_line":"               default\u003d\u0027snapshot-%s\u0027,"},{"line_number":64,"context_line":"               help\u003d\u0027Template string to be used to generate snapshot names\u0027),"},{"line_number":65,"context_line":"    cfg.StrOpt(\u0027backup_name_template\u0027,"},{"line_number":66,"context_line":"               default\u003d\u0027backup-%08x\u0027,"},{"line_number":67,"context_line":"               help\u003d\u0027Template string to be used to generate backup names\u0027), ]"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"FLAGS \u003d flags.FLAGS"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FQAw%3D","line":66,"in_reply_to":"AAAAM3%2F%2FXtA%3D","updated":"2013-01-31 18:58:06.000000000","message":"Changed \u0027backup-%08x\u0027 to \u0027backup-%s\"\n\nAdded entry in etc/cinder/cinder.conf.sample","commit_id":"5e08f0b55fa8fb2e4ad70b27e878d67e457ac3b8"}],"cinder/db/sqlalchemy/api.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":1848,"context_line":"                             session\u003dsession, read_deleted\u003d\"yes\").\\"},{"line_number":1849,"context_line":"            filter_by(id\u003dbackup_id).first()"},{"line_number":1850,"context_line":""},{"line_number":1851,"context_line":"        if not backup:"},{"line_number":1852,"context_line":"            raise exception.NotFound("},{"line_number":1853,"context_line":"                _(\"No backup with id %(backup_id)s\") % locals())"},{"line_number":1854,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FekE%3D","line":1851,"updated":"2013-01-21 07:03:31.000000000","message":"raise BackupNotFound","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":1848,"context_line":"                             session\u003dsession, read_deleted\u003d\"yes\").\\"},{"line_number":1849,"context_line":"            filter_by(id\u003dbackup_id).first()"},{"line_number":1850,"context_line":""},{"line_number":1851,"context_line":"        if not backup:"},{"line_number":1852,"context_line":"            raise exception.NotFound("},{"line_number":1853,"context_line":"                _(\"No backup with id %(backup_id)s\") % locals())"},{"line_number":1854,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fb3Y%3D","line":1851,"in_reply_to":"AAAAM3%2F%2FekE%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"098fb4143033b42d5599a4ce1ef960974f35243d","unresolved":false,"context_lines":[{"line_number":1815,"context_line":""},{"line_number":1816,"context_line":""},{"line_number":1817,"context_line":"@require_admin_context"},{"line_number":1818,"context_line":"def backup_get_all(context):"},{"line_number":1819,"context_line":"    return model_query(context, models.Backup, read_deleted\u003d\"yes\").all()"},{"line_number":1820,"context_line":""},{"line_number":1821,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FXs0%3D","line":1818,"updated":"2013-01-25 03:42:12.000000000","message":"We should probably go ahead and put the pagination here, check out volume_get_all.\n\nI\u0027m not too concerned about the other gets, just the get all for now.","commit_id":"5e08f0b55fa8fb2e4ad70b27e878d67e457ac3b8"}],"cinder/db/sqlalchemy/migrate_repo/versions/006_add_backup.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from sqlalchemy import Boolean, Column, DateTime"},{"line_number":19,"context_line":"from sqlalchemy import MetaData, Integer, String, Table, ForeignKey"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fejw%3D","line":18,"updated":"2013-01-21 07:03:31.000000000","message":"ForeignKey is not used","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":15,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":16,"context_line":"#    under the License."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"from sqlalchemy import Boolean, Column, DateTime"},{"line_number":19,"context_line":"from sqlalchemy import MetaData, Integer, String, Table, ForeignKey"},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"from cinder.openstack.common import log as logging"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fb20%3D","line":18,"in_reply_to":"AAAAM3%2F%2Fejw%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    # New table"},{"line_number":31,"context_line":"    backups \u003d Table("},{"line_number":32,"context_line":"            \u0027backups\u0027, meta,"},{"line_number":33,"context_line":"            Column(\u0027created_at\u0027, DateTime(timezone\u003dFalse)),"},{"line_number":34,"context_line":"            Column(\u0027updated_at\u0027, DateTime(timezone\u003dFalse)),"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FejQ%3D","line":31,"updated":"2013-01-21 07:03:31.000000000","message":"over-indented","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    meta.bind \u003d migrate_engine"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"    # New table"},{"line_number":31,"context_line":"    backups \u003d Table("},{"line_number":32,"context_line":"            \u0027backups\u0027, meta,"},{"line_number":33,"context_line":"            Column(\u0027created_at\u0027, DateTime(timezone\u003dFalse)),"},{"line_number":34,"context_line":"            Column(\u0027updated_at\u0027, DateTime(timezone\u003dFalse)),"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fb2Y%3D","line":31,"in_reply_to":"AAAAM3%2F%2FejQ%3D","updated":"2013-01-23 18:17:04.000000000","message":"Fixed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            Column(\u0027updated_at\u0027, DateTime(timezone\u003dFalse)),"},{"line_number":35,"context_line":"            Column(\u0027deleted_at\u0027, DateTime(timezone\u003dFalse)),"},{"line_number":36,"context_line":"            Column(\u0027deleted\u0027, Boolean(create_constraint\u003dTrue, name\u003dNone)),"},{"line_number":37,"context_line":"            Column(\u0027id\u0027, Integer(), primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":38,"context_line":"            Column(\u0027volume_id\u0027, String(36), nullable\u003dFalse),"},{"line_number":39,"context_line":"            Column(\u0027user_id\u0027, String(length\u003d255, convert_unicode\u003dFalse,"},{"line_number":40,"context_line":"                                     assert_unicode\u003dNone,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fej4%3D","line":37,"updated":"2013-01-21 07:03:31.000000000","message":"foreign key","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":34,"context_line":"            Column(\u0027updated_at\u0027, DateTime(timezone\u003dFalse)),"},{"line_number":35,"context_line":"            Column(\u0027deleted_at\u0027, DateTime(timezone\u003dFalse)),"},{"line_number":36,"context_line":"            Column(\u0027deleted\u0027, Boolean(create_constraint\u003dTrue, name\u003dNone)),"},{"line_number":37,"context_line":"            Column(\u0027id\u0027, Integer(), primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":38,"context_line":"            Column(\u0027volume_id\u0027, String(36), nullable\u003dFalse),"},{"line_number":39,"context_line":"            Column(\u0027user_id\u0027, String(length\u003d255, convert_unicode\u003dFalse,"},{"line_number":40,"context_line":"                                     assert_unicode\u003dNone,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FakI%3D","line":37,"in_reply_to":"AAAAM3%2F%2Fej4%3D","updated":"2013-01-23 18:17:04.000000000","message":"Foreign key removed from volume_id in models.py\n\nBackups are created with a volume reference but can out live the origin volume","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            Column(\u0027project_id\u0027, String(length\u003d255, convert_unicode\u003dFalse,"},{"line_number":44,"context_line":"                                        assert_unicode\u003dNone,"},{"line_number":45,"context_line":"                                        unicode_error\u003dNone,"},{"line_number":46,"context_line":"                                        _warn_on_bytestring\u003dFalse)),"},{"line_number":47,"context_line":"            Column(\u0027host\u0027, String(length\u003d255, convert_unicode\u003dFalse,"},{"line_number":48,"context_line":"                                  assert_unicode\u003dNone,"},{"line_number":49,"context_line":"                                  unicode_error\u003dNone,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fej0%3D","line":46,"updated":"2013-01-21 07:03:31.000000000","message":"foreign key according to models","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":43,"context_line":"            Column(\u0027project_id\u0027, String(length\u003d255, convert_unicode\u003dFalse,"},{"line_number":44,"context_line":"                                        assert_unicode\u003dNone,"},{"line_number":45,"context_line":"                                        unicode_error\u003dNone,"},{"line_number":46,"context_line":"                                        _warn_on_bytestring\u003dFalse)),"},{"line_number":47,"context_line":"            Column(\u0027host\u0027, String(length\u003d255, convert_unicode\u003dFalse,"},{"line_number":48,"context_line":"                                  assert_unicode\u003dNone,"},{"line_number":49,"context_line":"                                  unicode_error\u003dNone,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Faj4%3D","line":46,"in_reply_to":"AAAAM3%2F%2Fej0%3D","updated":"2013-01-23 18:17:04.000000000","message":"Foreign key removed from host in models.py\n\nTook this pattern from other tables for consistency.\nIn any case \u0027foreign key\u0027 had been commented out in models.py","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"}],"cinder/db/sqlalchemy/migrate_repo/versions/008_add_backup.py":[{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"098fb4143033b42d5599a4ce1ef960974f35243d","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        Column(\u0027deleted_at\u0027, DateTime(timezone\u003dFalse)),"},{"line_number":36,"context_line":"        Column(\u0027deleted\u0027, Boolean(create_constraint\u003dTrue, name\u003dNone)),"},{"line_number":37,"context_line":"        Column(\u0027id\u0027, Integer(), primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":38,"context_line":"        Column(\u0027volume_id\u0027, String(36), nullable\u003dFalse),"},{"line_number":39,"context_line":"        Column(\u0027user_id\u0027, String(length\u003d255, convert_unicode\u003dFalse,"},{"line_number":40,"context_line":"                                 assert_unicode\u003dNone,"},{"line_number":41,"context_line":"                                 unicode_error\u003dNone,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FXss%3D","line":38,"updated":"2013-01-25 03:42:12.000000000","message":"We should probably add an FK constraint here","commit_id":"5e08f0b55fa8fb2e4ad70b27e878d67e457ac3b8"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"68f36283f2aac01f115ccd685314e355acce6d0a","unresolved":false,"context_lines":[{"line_number":35,"context_line":"        Column(\u0027deleted_at\u0027, DateTime(timezone\u003dFalse)),"},{"line_number":36,"context_line":"        Column(\u0027deleted\u0027, Boolean(create_constraint\u003dTrue, name\u003dNone)),"},{"line_number":37,"context_line":"        Column(\u0027id\u0027, Integer(), primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":38,"context_line":"        Column(\u0027volume_id\u0027, String(36), nullable\u003dFalse),"},{"line_number":39,"context_line":"        Column(\u0027user_id\u0027, String(length\u003d255, convert_unicode\u003dFalse,"},{"line_number":40,"context_line":"                                 assert_unicode\u003dNone,"},{"line_number":41,"context_line":"                                 unicode_error\u003dNone,"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FQAg%3D","line":38,"in_reply_to":"AAAAM3%2F%2FXss%3D","updated":"2013-01-31 18:58:06.000000000","message":"We don\u0027t want to have a FK constraint between backups and volume_id. Backups, once created are independent of the source volume.","commit_id":"5e08f0b55fa8fb2e4ad70b27e878d67e457ac3b8"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"c31f70124277b51c8460d48add8d924df2d69f85","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        Column(\u0027updated_at\u0027, DateTime(timezone\u003dFalse)),"},{"line_number":35,"context_line":"        Column(\u0027deleted_at\u0027, DateTime(timezone\u003dFalse)),"},{"line_number":36,"context_line":"        Column(\u0027deleted\u0027, Boolean(create_constraint\u003dTrue, name\u003dNone)),"},{"line_number":37,"context_line":"        Column(\u0027id\u0027, Integer(), primary_key\u003dTrue, nullable\u003dFalse),"},{"line_number":38,"context_line":"        Column(\u0027volume_id\u0027, String(36), nullable\u003dFalse),"},{"line_number":39,"context_line":"        Column(\u0027user_id\u0027, String(length\u003d255, convert_unicode\u003dFalse,"},{"line_number":40,"context_line":"                                 assert_unicode\u003dNone,"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2FLoM%3D","line":37,"updated":"2013-02-04 17:39:07.000000000","message":"UUID","commit_id":"d86711045e845f9cf0bca149c74ad29148efce71"}],"cinder/db/sqlalchemy/models.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        backref\u003d\"extra_specs\","},{"line_number":202,"context_line":"        foreign_keys\u003dvolume_type_id,"},{"line_number":203,"context_line":"        primaryjoin\u003d\u0027and_(\u0027"},{"line_number":204,"context_line":"        \u0027VolumeTypeExtraSpecs.volume_type_id \u003d\u003d VolumeTypes.id,\u0027"},{"line_number":205,"context_line":"        \u0027VolumeTypeExtraSpecs.deleted \u003d\u003d False)\u0027)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fejo%3D","line":204,"updated":"2013-01-21 07:03:31.000000000","message":"This change is unrelated to this commit.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        backref\u003d\"extra_specs\","},{"line_number":202,"context_line":"        foreign_keys\u003dvolume_type_id,"},{"line_number":203,"context_line":"        primaryjoin\u003d\u0027and_(\u0027"},{"line_number":204,"context_line":"        \u0027VolumeTypeExtraSpecs.volume_type_id \u003d\u003d VolumeTypes.id,\u0027"},{"line_number":205,"context_line":"        \u0027VolumeTypeExtraSpecs.deleted \u003d\u003d False)\u0027)"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fakc%3D","line":204,"in_reply_to":"AAAAM3%2F%2Fejo%3D","updated":"2013-01-23 18:17:04.000000000","message":"Reverted","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":2481,"name":"Rongze Zhu","email":"zrzhit@gmail.com","username":"zrzhit"},"change_message_id":"d4765e0446b8ce0eec1a3a1099a3b3cb19c502b0","unresolved":false,"context_lines":[{"line_number":390,"context_line":"    user_id \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":391,"context_line":"    project_id \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"    volume_id \u003d Column(String(36))"},{"line_number":394,"context_line":"    host \u003d Column(String(255))  # , ForeignKey(\u0027hosts.id\u0027))"},{"line_number":395,"context_line":"    availability_zone \u003d Column(String(255))"},{"line_number":396,"context_line":"    display_name \u003d Column(String(255))"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeSI%3D","line":393,"updated":"2013-01-21 02:58:20.000000000","message":"There are two volume_id.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":390,"context_line":"    user_id \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":391,"context_line":"    project_id \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"    volume_id \u003d Column(String(36))"},{"line_number":394,"context_line":"    host \u003d Column(String(255))  # , ForeignKey(\u0027hosts.id\u0027))"},{"line_number":395,"context_line":"    availability_zone \u003d Column(String(255))"},{"line_number":396,"context_line":"    display_name \u003d Column(String(255))"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FakU%3D","line":393,"in_reply_to":"AAAAM3%2F%2FeSI%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed duplicate volume_id","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"098fb4143033b42d5599a4ce1ef960974f35243d","unresolved":false,"context_lines":[{"line_number":397,"context_line":"    user_id \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":398,"context_line":"    project_id \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    volume_id \u003d Column(String(36), nullable\u003dFalse)"},{"line_number":401,"context_line":"    host \u003d Column(String(255))"},{"line_number":402,"context_line":"    availability_zone \u003d Column(String(255))"},{"line_number":403,"context_line":"    display_name \u003d Column(String(255))"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FXsk%3D","line":400,"updated":"2013-01-25 03:42:12.000000000","message":"FK constraint","commit_id":"5e08f0b55fa8fb2e4ad70b27e878d67e457ac3b8"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"68f36283f2aac01f115ccd685314e355acce6d0a","unresolved":false,"context_lines":[{"line_number":397,"context_line":"    user_id \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":398,"context_line":"    project_id \u003d Column(String(255), nullable\u003dFalse)"},{"line_number":399,"context_line":""},{"line_number":400,"context_line":"    volume_id \u003d Column(String(36), nullable\u003dFalse)"},{"line_number":401,"context_line":"    host \u003d Column(String(255))"},{"line_number":402,"context_line":"    availability_zone \u003d Column(String(255))"},{"line_number":403,"context_line":"    display_name \u003d Column(String(255))"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FQAk%3D","line":400,"in_reply_to":"AAAAM3%2F%2FXsk%3D","updated":"2013-01-31 18:58:06.000000000","message":"We don\u0027t want to have a FK constraint between backups and volume_id. Backups, once created are independent of the source volume","commit_id":"5e08f0b55fa8fb2e4ad70b27e878d67e457ac3b8"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"c31f70124277b51c8460d48add8d924df2d69f85","unresolved":false,"context_lines":[{"line_number":388,"context_line":"class Backup(BASE, CinderBase):"},{"line_number":389,"context_line":"    \"\"\"Represents a backup of a volume to Swift.\"\"\""},{"line_number":390,"context_line":"    __tablename__ \u003d \u0027backups\u0027"},{"line_number":391,"context_line":"    id \u003d Column(Integer, primary_key\u003dTrue, autoincrement\u003dTrue)"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"    @property"},{"line_number":394,"context_line":"    def name(self):"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2FLt0%3D","line":391,"updated":"2013-02-04 17:39:07.000000000","message":"I would really prefer UUID here","commit_id":"d86711045e845f9cf0bca149c74ad29148efce71"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"1f9747376658dafdba9b52de1ea9b52e114ccd5f","unresolved":false,"context_lines":[{"line_number":405,"context_line":"    container \u003d Column(String(255))"},{"line_number":406,"context_line":"    status \u003d Column(String(255))"},{"line_number":407,"context_line":"    fail_reason \u003d Column(String(255))"},{"line_number":408,"context_line":"    swift_prefix \u003d Column(String(255))"},{"line_number":409,"context_line":"    service \u003d Column(String(255))"},{"line_number":410,"context_line":"    size \u003d Column(Integer)"},{"line_number":411,"context_line":"    object_count \u003d Column(Integer)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B32Q%3D","line":408,"updated":"2013-02-15 21:04:48.000000000","message":"just make this prefix since other backup solutions are going to use this.","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"f028eae7cd0d0bc2c519610ec28d1473acf5e0eb","unresolved":false,"context_lines":[{"line_number":405,"context_line":"    container \u003d Column(String(255))"},{"line_number":406,"context_line":"    status \u003d Column(String(255))"},{"line_number":407,"context_line":"    fail_reason \u003d Column(String(255))"},{"line_number":408,"context_line":"    swift_prefix \u003d Column(String(255))"},{"line_number":409,"context_line":"    service \u003d Column(String(255))"},{"line_number":410,"context_line":"    size \u003d Column(Integer)"},{"line_number":411,"context_line":"    object_count \u003d Column(Integer)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2ByDQ%3D","line":408,"in_reply_to":"AAAAM3%2F%2B32Q%3D","updated":"2013-02-19 12:17:10.000000000","message":"Done","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"}],"cinder/scheduler/chance.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f5f245c6d497ae937ffb850788c24bbc1cb45054","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self.volume_rpcapi.create_volume(context, updated_volume, host,"},{"line_number":72,"context_line":"                                         snapshot_id, image_id)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def schedule_create_backup(self, context, backup_id, volume_id, container,"},{"line_number":75,"context_line":"                               availability_zone, *_args, **_kwargs):"},{"line_number":76,"context_line":"        \"\"\"Picks a host that is up, at random.\"\"\""},{"line_number":77,"context_line":"        topic \u003d FLAGS.backup_topic"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fhco%3D","line":74,"updated":"2013-01-17 15:37:13.000000000","message":"I\u0027m not a scheduler expert, but doesn\u0027t this (and restore) have to go to the same host that \"owns\" the volume?","commit_id":"73136f08302c030a6f4de44225385b67f751a12b"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"648436c179b0804cc06b26037d94890fde484c4d","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        self.volume_rpcapi.create_volume(context, updated_volume, host,"},{"line_number":72,"context_line":"                                         snapshot_id, image_id)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    def schedule_create_backup(self, context, backup_id, volume_id, container,"},{"line_number":75,"context_line":"                               availability_zone, *_args, **_kwargs):"},{"line_number":76,"context_line":"        \"\"\"Picks a host that is up, at random.\"\"\""},{"line_number":77,"context_line":"        topic \u003d FLAGS.backup_topic"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Ffzw%3D","line":74,"in_reply_to":"AAAAM3%2F%2Fhco%3D","updated":"2013-01-18 16:39:33.000000000","message":"Duncan Thomas (DuncanT) is investigating this one. I\u0027ve marked it with a TODO in the code","commit_id":"73136f08302c030a6f4de44225385b67f751a12b"},{"author":{"_account_id":2243,"name":"John Griffith","email":"john.griffith8@gmail.com","username":"john-griffith"},"change_message_id":"098fb4143033b42d5599a4ce1ef960974f35243d","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                                         snapshot_id, image_id)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    # TODO(frankm): Do backup creates and restores have to go to the same"},{"line_number":75,"context_line":"    # host that owns the volume?"},{"line_number":76,"context_line":"    def schedule_create_backup(self, context, backup_id, volume_id, container,"},{"line_number":77,"context_line":"                               availability_zone, *_args, **_kwargs):"},{"line_number":78,"context_line":"        \"\"\"Picks a host that is up, at random.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FXrg%3D","line":75,"updated":"2013-01-25 03:42:12.000000000","message":"For your current implementation yes, you\u0027re using local_path from what I gather.  We can change this to use a local iscsi mount and cover those that inherit from iSCSI in the future but for now...  I haven\u0027t made it to the lvm driver yet so maybe you\u0027ve got something different in mind.","commit_id":"5e08f0b55fa8fb2e4ad70b27e878d67e457ac3b8"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"68f36283f2aac01f115ccd685314e355acce6d0a","unresolved":false,"context_lines":[{"line_number":72,"context_line":"                                         snapshot_id, image_id)"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"    # TODO(frankm): Do backup creates and restores have to go to the same"},{"line_number":75,"context_line":"    # host that owns the volume?"},{"line_number":76,"context_line":"    def schedule_create_backup(self, context, backup_id, volume_id, container,"},{"line_number":77,"context_line":"                               availability_zone, *_args, **_kwargs):"},{"line_number":78,"context_line":"        \"\"\"Picks a host that is up, at random.\"\"\""}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FP8U%3D","line":75,"in_reply_to":"AAAAM3%2F%2FXrg%3D","updated":"2013-01-31 18:58:06.000000000","message":"Going to leave this as is for now as per the cinder-meeting discussion 30th Jan. Longer term we may need to determine the driver capabilities in the scheduler before deciding where to send the request","commit_id":"5e08f0b55fa8fb2e4ad70b27e878d67e457ac3b8"}],"cinder/scheduler/driver.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from cinder import db"},{"line_number":25,"context_line":"from cinder import flags"},{"line_number":26,"context_line":"from cinder import utils"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from cinder.backup import rpcapi as backup_rpcapi"},{"line_number":29,"context_line":"from cinder.openstack.common import cfg"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fejs%3D","line":26,"updated":"2013-01-21 07:03:31.000000000","message":"there should be no newline here","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":23,"context_line":""},{"line_number":24,"context_line":"from cinder import db"},{"line_number":25,"context_line":"from cinder import flags"},{"line_number":26,"context_line":"from cinder import utils"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"from cinder.backup import rpcapi as backup_rpcapi"},{"line_number":29,"context_line":"from cinder.openstack.common import cfg"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fb1k%3D","line":26,"in_reply_to":"AAAAM3%2F%2Fejs%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def schedule_create_backup(self, context, backup_id, *_args, **_kwargs):"},{"line_number":95,"context_line":"        \"\"\"Must override schedule method for scheduler to work.\"\"\""},{"line_number":96,"context_line":"        raise NotImplementedError("},{"line_number":97,"context_line":"                            _(\"Must implement schedule_backup_operation\"))"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def schedule_restore_backup(self, context, topic, backup_id, volume_id):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fejg%3D","line":96,"updated":"2013-01-21 07:03:31.000000000","message":"over-indented","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":93,"context_line":""},{"line_number":94,"context_line":"    def schedule_create_backup(self, context, backup_id, *_args, **_kwargs):"},{"line_number":95,"context_line":"        \"\"\"Must override schedule method for scheduler to work.\"\"\""},{"line_number":96,"context_line":"        raise NotImplementedError("},{"line_number":97,"context_line":"                            _(\"Must implement schedule_backup_operation\"))"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def schedule_restore_backup(self, context, topic, backup_id, volume_id):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fb1U%3D","line":96,"in_reply_to":"AAAAM3%2F%2Fejg%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def schedule_restore_backup(self, context, topic, backup_id, volume_id):"},{"line_number":100,"context_line":"        \"\"\"Must override schedule method for scheduler to work.\"\"\""},{"line_number":101,"context_line":"        raise NotImplementedError("},{"line_number":102,"context_line":"                            _(\"Must implement schedule_backup_operation\"))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def schedule_delete_backup(self, context, topic, backup_id):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fejc%3D","line":101,"updated":"2013-01-21 07:03:31.000000000","message":"over-indented","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":98,"context_line":""},{"line_number":99,"context_line":"    def schedule_restore_backup(self, context, topic, backup_id, volume_id):"},{"line_number":100,"context_line":"        \"\"\"Must override schedule method for scheduler to work.\"\"\""},{"line_number":101,"context_line":"        raise NotImplementedError("},{"line_number":102,"context_line":"                            _(\"Must implement schedule_backup_operation\"))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def schedule_delete_backup(self, context, topic, backup_id):"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fb1Q%3D","line":101,"in_reply_to":"AAAAM3%2F%2Fejc%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def schedule_delete_backup(self, context, topic, backup_id):"},{"line_number":105,"context_line":"        \"\"\"Must override schedule method for scheduler to work.\"\"\""},{"line_number":106,"context_line":"        raise NotImplementedError("},{"line_number":107,"context_line":"                            _(\"Must implement schedule_backup_operation\"))"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FejY%3D","line":106,"updated":"2013-01-21 07:03:31.000000000","message":"over-indented","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":103,"context_line":""},{"line_number":104,"context_line":"    def schedule_delete_backup(self, context, topic, backup_id):"},{"line_number":105,"context_line":"        \"\"\"Must override schedule method for scheduler to work.\"\"\""},{"line_number":106,"context_line":"        raise NotImplementedError("},{"line_number":107,"context_line":"                            _(\"Must implement schedule_backup_operation\"))"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fb1M%3D","line":106,"in_reply_to":"AAAAM3%2F%2FejY%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"}],"cinder/scheduler/simple.py":[{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"6924ff32dd78f0ed6a10da8447776bb80f0f897d","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    \"\"\"Implements Naive Scheduler that tries to find least loaded host.\"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def _schedule_random_host(self, context, topic, request_spec, **kwargs):"},{"line_number":48,"context_line":"        \"\"\"Picks a host that is up at random - used for cases where we don\u0027t"},{"line_number":49,"context_line":"           yet have load metrics (like backup)\"\"\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        elevated \u003d context.elevated()"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B26E%3D","line":48,"updated":"2013-02-16 15:46:19.000000000","message":"Period at end (plus other three docstrings below)","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":1207,"name":"Duncan Thomas","email":"duncan.thomas@gmail.com","username":"duncan-thomas"},"change_message_id":"f028eae7cd0d0bc2c519610ec28d1473acf5e0eb","unresolved":false,"context_lines":[{"line_number":45,"context_line":"    \"\"\"Implements Naive Scheduler that tries to find least loaded host.\"\"\""},{"line_number":46,"context_line":""},{"line_number":47,"context_line":"    def _schedule_random_host(self, context, topic, request_spec, **kwargs):"},{"line_number":48,"context_line":"        \"\"\"Picks a host that is up at random - used for cases where we don\u0027t"},{"line_number":49,"context_line":"           yet have load metrics (like backup)\"\"\""},{"line_number":50,"context_line":""},{"line_number":51,"context_line":"        elevated \u003d context.elevated()"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2ByDU%3D","line":48,"in_reply_to":"AAAAM3%2F%2B26E%3D","updated":"2013-02-19 12:17:10.000000000","message":"This is gone in the next patch set, scheduler integration for backups will return in a future patch set","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"6924ff32dd78f0ed6a10da8447776bb80f0f897d","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        \"\"\"Picks a host that is up, at random. This should change to a load"},{"line_number":130,"context_line":"           based metric when one is available\"\"\""},{"line_number":131,"context_line":"        topic \u003d FLAGS.backup_topic"},{"line_number":132,"context_line":"        host \u003d self._schedule_random_host(context, topic, None)"},{"line_number":133,"context_line":"        self.backup_rpcapi.delete_backup(context, host, backup_id)"}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B25k%3D","line":132,"updated":"2013-02-16 15:46:19.000000000","message":"Will this work correctly? It is choosing a host at random, and (tries to) delete backup on that host. What if the host doesnt have that backup/volume?","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"}],"cinder/tests/api/contrib/test_backups.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"12ee7a6d3cd3464e3c11f5a6f165ab2a7848545c","unresolved":false,"context_lines":[{"line_number":647,"context_line":""},{"line_number":648,"context_line":"        backup_id \u003d self._create_backup(status\u003d\u0027available\u0027)"},{"line_number":649,"context_line":"        # need to create the volume referenced below first"},{"line_number":650,"context_line":"        volume_size \u003d 5"},{"line_number":651,"context_line":"        volume_id \u003d self._create_volume(status\u003d\u0027available\u0027, size\u003dvolume_size)"},{"line_number":652,"context_line":""},{"line_number":653,"context_line":"        body \u003d {\"restore\": {\"volume_id\": volume_id, }}"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2FMZc%3D","line":650,"updated":"2013-02-04 05:47:56.000000000","message":"(cont from patchset 12): Just because this is all mocked doesn\u0027t mean you can\u0027t make the test case clear that a size 0 is considered an invalid input.","commit_id":"d86711045e845f9cf0bca149c74ad29148efce71"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"1f9747376658dafdba9b52de1ea9b52e114ccd5f","unresolved":false,"context_lines":[{"line_number":646,"context_line":"                       fake_backup_api_restore_throwing_InvalidInput)"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"        backup_id \u003d self._create_backup(status\u003d\u0027available\u0027)"},{"line_number":649,"context_line":"        # need to create the volume referenced below first"},{"line_number":650,"context_line":"        volume_size \u003d 5"},{"line_number":651,"context_line":"        volume_id \u003d self._create_volume(status\u003d\u0027available\u0027, size\u003dvolume_size)"},{"line_number":652,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B330%3D","line":649,"updated":"2013-02-15 21:04:48.000000000","message":"(cont from patchset 12): Just because this is all mocked doesn\u0027t mean you can\u0027t make the test case clear that a size 0 is considered an invalid input.","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"},{"author":{"_account_id":6153,"name":"stephen-mulcahy","email":"stephen.mulcahy@hpe.com","username":"stephen-mulcahy"},"change_message_id":"b8e7e49636976baeea201f6c100d7f251a8661f9","unresolved":false,"context_lines":[{"line_number":646,"context_line":"                       fake_backup_api_restore_throwing_InvalidInput)"},{"line_number":647,"context_line":""},{"line_number":648,"context_line":"        backup_id \u003d self._create_backup(status\u003d\u0027available\u0027)"},{"line_number":649,"context_line":"        # need to create the volume referenced below first"},{"line_number":650,"context_line":"        volume_size \u003d 5"},{"line_number":651,"context_line":"        volume_id \u003d self._create_volume(status\u003d\u0027available\u0027, size\u003dvolume_size)"},{"line_number":652,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2BxbE%3D","line":649,"in_reply_to":"AAAAM3%2F%2B330%3D","updated":"2013-02-19 16:00:28.000000000","message":"Done - changed volume_size in this test case to 0","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"}],"cinder/tests/api/contrib/test_volume_backups.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Tests for Volume Backup code."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import datetime"},{"line_number":21,"context_line":"import json"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FejI%3D","line":18,"updated":"2013-01-21 07:03:31.000000000","message":"import order should be:\n\n1) stdlib\n2) third-party\n3) cinder\n\nhttps://github.com/openstack/cinder/blob/master/HACKING.rst","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Tests for Volume Backup code."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import datetime"},{"line_number":21,"context_line":"import json"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FbzU%3D","line":18,"in_reply_to":"AAAAM3%2F%2FejI%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Tests for Volume Backup code."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import datetime"},{"line_number":21,"context_line":"import json"},{"line_number":22,"context_line":"import webob"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FejM%3D","line":19,"updated":"2013-01-21 07:03:31.000000000","message":"datetime is not used","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":16,"context_line":"\"\"\""},{"line_number":17,"context_line":"Tests for Volume Backup code."},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import datetime"},{"line_number":21,"context_line":"import json"},{"line_number":22,"context_line":"import webob"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FbzM%3D","line":19,"in_reply_to":"AAAAM3%2F%2FejM%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    @staticmethod"},{"line_number":79,"context_line":"    def _create_volume(display_name\u003d\u0027test_volume\u0027,"},{"line_number":80,"context_line":"                       display_description\u003d\u0027this is a test volume\u0027,"},{"line_number":81,"context_line":"                       status\u003d\u0027creating\u0027,"},{"line_number":82,"context_line":"                       size\u003d0):"},{"line_number":83,"context_line":"        \"\"\"Create a volume object.\"\"\""},{"line_number":84,"context_line":"        vol \u003d {}"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Febg%3D","line":81,"updated":"2013-01-21 07:03:31.000000000","message":"volume size 0 is not allowed in cinder","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":78,"context_line":"    @staticmethod"},{"line_number":79,"context_line":"    def _create_volume(display_name\u003d\u0027test_volume\u0027,"},{"line_number":80,"context_line":"                       display_description\u003d\u0027this is a test volume\u0027,"},{"line_number":81,"context_line":"                       status\u003d\u0027creating\u0027,"},{"line_number":82,"context_line":"                       size\u003d0):"},{"line_number":83,"context_line":"        \"\"\"Create a volume object.\"\"\""},{"line_number":84,"context_line":"        vol \u003d {}"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fbys%3D","line":81,"in_reply_to":"AAAAM3%2F%2Febg%3D","updated":"2013-01-23 18:17:04.000000000","message":"Changed to: size\u003d1","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        self.assertEqual(res.status_int, 200)"},{"line_number":456,"context_line":"        self.assertEqual(res_dict[\u0027restore\u0027][\u0027backup_id\u0027], backup_id)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def test_restore_backup_with_InvalidInput(self):"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        def fake_backup_api_restore_throwing_InvalidInput(cls, context,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeRM%3D","line":457,"updated":"2013-01-21 07:03:31.000000000","message":"Which code path does this actually happen?","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"838afd200d6d01ad811f4fb612093b3cdcf34006","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        self.assertEqual(res.status_int, 200)"},{"line_number":456,"context_line":"        self.assertEqual(res_dict[\u0027restore\u0027][\u0027backup_id\u0027], backup_id)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def test_restore_backup_with_InvalidInput(self):"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        def fake_backup_api_restore_throwing_InvalidInput(cls, context,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FNbY%3D","line":457,"in_reply_to":"AAAAM3%2F%2FP3Q%3D","updated":"2013-02-04 05:34:15.000000000","message":"Understood. However, your tests should reflect correct input.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"9770e09229c8f0968cf1f14408a5ad605de2a9b6","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        self.assertEqual(res.status_int, 200)"},{"line_number":456,"context_line":"        self.assertEqual(res_dict[\u0027restore\u0027][\u0027backup_id\u0027], backup_id)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def test_restore_backup_with_InvalidInput(self):"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        def fake_backup_api_restore_throwing_InvalidInput(cls, context,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FP3Q%3D","line":457,"in_reply_to":"AAAAM3%2F%2FWOs%3D","updated":"2013-01-31 18:52:10.000000000","message":"The restore function in cinder.backup.api has been stubbed out by the \u0027fake_backup_api_restore_throwing_InvalidInput\u0027 function. So when running this test case we never get as far as the create function in cinder.volume.api so the volume size makes no difference.\n\nThe intention of the test case is to check that if an InvalidInput exception is raised the restore function in cinder.api.contrib.backups handles it.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"7cf67af51548289cd7764d1d60c1b74df34923b2","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        self.assertEqual(res.status_int, 200)"},{"line_number":456,"context_line":"        self.assertEqual(res_dict[\u0027restore\u0027][\u0027backup_id\u0027], backup_id)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def test_restore_backup_with_InvalidInput(self):"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        def fake_backup_api_restore_throwing_InvalidInput(cls, context,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FWOs%3D","line":457,"in_reply_to":"AAAAM3%2F%2Fbw0%3D","updated":"2013-01-27 00:24:29.000000000","message":"But your test is passing 5 which is greater than 0.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":454,"context_line":""},{"line_number":455,"context_line":"        self.assertEqual(res.status_int, 200)"},{"line_number":456,"context_line":"        self.assertEqual(res_dict[\u0027restore\u0027][\u0027backup_id\u0027], backup_id)"},{"line_number":457,"context_line":""},{"line_number":458,"context_line":"    def test_restore_backup_with_InvalidInput(self):"},{"line_number":459,"context_line":""},{"line_number":460,"context_line":"        def fake_backup_api_restore_throwing_InvalidInput(cls, context,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fbw0%3D","line":457,"in_reply_to":"AAAAM3%2F%2FeRM%3D","updated":"2013-01-23 18:17:04.000000000","message":"If a volume to restore to is not specified then backup restore calls the create function in the volume api \nThe create function in cinder/volume/api.py raises an InvalidInput exception if the specified volume size \u003c\u003d 0","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":579,"context_line":""},{"line_number":580,"context_line":"    def test_restore_backup_with_VolumeSizeExceedsAvailableQuota(self):"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        def fake_backup_api_restore_throwing_VolumeSizeExceedsAvailableQuota("},{"line_number":583,"context_line":"            cls, context, backup_id, volume_id):"},{"line_number":584,"context_line":"            raise exception.VolumeSizeExceedsAvailableQuota()"},{"line_number":585,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FejE%3D","line":582,"updated":"2013-01-21 07:03:31.000000000","message":"Since this line lines up with the next line, it\u0027s not really distinguished as continuing from above. It should be tabbed one more over.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":579,"context_line":""},{"line_number":580,"context_line":"    def test_restore_backup_with_VolumeSizeExceedsAvailableQuota(self):"},{"line_number":581,"context_line":""},{"line_number":582,"context_line":"        def fake_backup_api_restore_throwing_VolumeSizeExceedsAvailableQuota("},{"line_number":583,"context_line":"            cls, context, backup_id, volume_id):"},{"line_number":584,"context_line":"            raise exception.VolumeSizeExceedsAvailableQuota()"},{"line_number":585,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fbwc%3D","line":582,"in_reply_to":"AAAAM3%2F%2FejE%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":608,"context_line":"        self.assertEqual(res_dict[\u0027overLimit\u0027][\u0027code\u0027], 413)"},{"line_number":609,"context_line":"        self.assertEqual(res_dict[\u0027overLimit\u0027][\u0027message\u0027],"},{"line_number":610,"context_line":"                         \u0027Requested volume exceeds allowed volume size quota\u0027)"},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"    def test_restore_backup_with_VolumeLimitExceeded(self):"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"        def fake_backup_api_restore_throwing_VolumeLimitExceeded(cls,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeRA%3D","line":611,"updated":"2013-01-21 07:03:31.000000000","message":"Which code path does this happen?","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"7cf67af51548289cd7764d1d60c1b74df34923b2","unresolved":false,"context_lines":[{"line_number":608,"context_line":"        self.assertEqual(res_dict[\u0027overLimit\u0027][\u0027code\u0027], 413)"},{"line_number":609,"context_line":"        self.assertEqual(res_dict[\u0027overLimit\u0027][\u0027message\u0027],"},{"line_number":610,"context_line":"                         \u0027Requested volume exceeds allowed volume size quota\u0027)"},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"    def test_restore_backup_with_VolumeLimitExceeded(self):"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"        def fake_backup_api_restore_throwing_VolumeLimitExceeded(cls,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FWOo%3D","line":611,"in_reply_to":"AAAAM3%2F%2FbwE%3D","updated":"2013-01-27 00:24:29.000000000","message":"That makes sense. I guess the test case name wasn\u0027t apparent to me until you mentioned this and I looked at the exception itself.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":608,"context_line":"        self.assertEqual(res_dict[\u0027overLimit\u0027][\u0027code\u0027], 413)"},{"line_number":609,"context_line":"        self.assertEqual(res_dict[\u0027overLimit\u0027][\u0027message\u0027],"},{"line_number":610,"context_line":"                         \u0027Requested volume exceeds allowed volume size quota\u0027)"},{"line_number":611,"context_line":""},{"line_number":612,"context_line":"    def test_restore_backup_with_VolumeLimitExceeded(self):"},{"line_number":613,"context_line":""},{"line_number":614,"context_line":"        def fake_backup_api_restore_throwing_VolumeLimitExceeded(cls,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FbwE%3D","line":611,"in_reply_to":"AAAAM3%2F%2FeRA%3D","updated":"2013-01-23 18:17:04.000000000","message":"If a volume to restore to is not specified then backup restore calls the create function in the volume api \nThe create function in cinder/volume/api.py raises a VolumeLimitExceeded exception if the user exceeds their volume quota","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"}],"cinder/tests/fake_swift_client.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2012 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeQg%3D","line":1,"updated":"2013-01-21 07:03:31.000000000","message":"Maybe this should be in the cinder/tests/backup folder?","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (C) 2012 Hewlett-Packard Development Company, L.P."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FacI%3D","line":1,"in_reply_to":"AAAAM3%2F%2FeQg%3D","updated":"2013-01-23 18:17:04.000000000","message":"Agreed. Moved to cinder/tests/backup folder","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"}],"cinder/tests/test_backup.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Tests for Backup code."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import bz2"},{"line_number":21,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FePo%3D","line":18,"updated":"2013-01-21 07:03:31.000000000","message":"import order should be:\n\n1) stdlib\n2) third-party\n3) cinder\n\nhttps://github.com/openstack/cinder/blob/master/HACKING.rst","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Tests for Backup code."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import bz2"},{"line_number":21,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FbvE%3D","line":18,"in_reply_to":"AAAAM3%2F%2FePo%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Tests for Backup code."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import bz2"},{"line_number":21,"context_line":"import hashlib"},{"line_number":22,"context_line":"import httplib"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeQc%3D","line":19,"updated":"2013-01-21 07:03:31.000000000","message":"bz2 not used","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Tests for Backup code."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import bz2"},{"line_number":21,"context_line":"import hashlib"},{"line_number":22,"context_line":"import httplib"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fbvg%3D","line":19,"in_reply_to":"AAAAM3%2F%2FeQc%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import bz2"},{"line_number":21,"context_line":"import hashlib"},{"line_number":22,"context_line":"import httplib"},{"line_number":23,"context_line":"import math"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeQY%3D","line":20,"updated":"2013-01-21 07:03:31.000000000","message":"hashlib not used","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import bz2"},{"line_number":21,"context_line":"import hashlib"},{"line_number":22,"context_line":"import httplib"},{"line_number":23,"context_line":"import math"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fbvc%3D","line":20,"in_reply_to":"AAAAM3%2F%2FeQY%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import bz2"},{"line_number":21,"context_line":"import hashlib"},{"line_number":22,"context_line":"import httplib"},{"line_number":23,"context_line":"import math"},{"line_number":24,"context_line":"import os"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeQU%3D","line":21,"updated":"2013-01-21 07:03:31.000000000","message":"httplib not used","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import bz2"},{"line_number":21,"context_line":"import hashlib"},{"line_number":22,"context_line":"import httplib"},{"line_number":23,"context_line":"import math"},{"line_number":24,"context_line":"import os"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FbvY%3D","line":21,"in_reply_to":"AAAAM3%2F%2FeQU%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import bz2"},{"line_number":21,"context_line":"import hashlib"},{"line_number":22,"context_line":"import httplib"},{"line_number":23,"context_line":"import math"},{"line_number":24,"context_line":"import os"},{"line_number":25,"context_line":"import tempfile"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeQQ%3D","line":22,"updated":"2013-01-21 07:03:31.000000000","message":"math not used","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import bz2"},{"line_number":21,"context_line":"import hashlib"},{"line_number":22,"context_line":"import httplib"},{"line_number":23,"context_line":"import math"},{"line_number":24,"context_line":"import os"},{"line_number":25,"context_line":"import tempfile"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FbvU%3D","line":22,"in_reply_to":"AAAAM3%2F%2FeQQ%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import bz2"},{"line_number":21,"context_line":"import hashlib"},{"line_number":22,"context_line":"import httplib"},{"line_number":23,"context_line":"import math"},{"line_number":24,"context_line":"import os"},{"line_number":25,"context_line":"import tempfile"},{"line_number":26,"context_line":"import time"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeQM%3D","line":23,"updated":"2013-01-21 07:03:31.000000000","message":"os not used","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":20,"context_line":"import bz2"},{"line_number":21,"context_line":"import hashlib"},{"line_number":22,"context_line":"import httplib"},{"line_number":23,"context_line":"import math"},{"line_number":24,"context_line":"import os"},{"line_number":25,"context_line":"import tempfile"},{"line_number":26,"context_line":"import time"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FbvQ%3D","line":23,"in_reply_to":"AAAAM3%2F%2FeQM%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import httplib"},{"line_number":23,"context_line":"import math"},{"line_number":24,"context_line":"import os"},{"line_number":25,"context_line":"import tempfile"},{"line_number":26,"context_line":"import time"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"import cinder"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeQI%3D","line":25,"updated":"2013-01-21 07:03:31.000000000","message":"time not used","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":22,"context_line":"import httplib"},{"line_number":23,"context_line":"import math"},{"line_number":24,"context_line":"import os"},{"line_number":25,"context_line":"import tempfile"},{"line_number":26,"context_line":"import time"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"import cinder"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FbvM%3D","line":25,"in_reply_to":"AAAAM3%2F%2FeQI%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":24,"context_line":"import os"},{"line_number":25,"context_line":"import tempfile"},{"line_number":26,"context_line":"import time"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"import cinder"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from cinder import context"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeQE%3D","line":27,"updated":"2013-01-21 07:03:31.000000000","message":"cinder not used","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":24,"context_line":"import os"},{"line_number":25,"context_line":"import tempfile"},{"line_number":26,"context_line":"import time"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"import cinder"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"from cinder import context"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FbvI%3D","line":27,"in_reply_to":"AAAAM3%2F%2FeQE%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"from cinder.openstack.common import importutils"},{"line_number":37,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"from cinder.tests import fake_flags"},{"line_number":40,"context_line":"from cinder.volume import iscsi"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeP0%3D","line":38,"updated":"2013-01-21 07:03:31.000000000","message":"fake_flags not used","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"from cinder.openstack.common import importutils"},{"line_number":37,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"from cinder.tests import fake_flags"},{"line_number":40,"context_line":"from cinder.volume import iscsi"},{"line_number":41,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FbuQ%3D","line":38,"in_reply_to":"AAAAM3%2F%2FeP0%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from cinder.openstack.common import importutils"},{"line_number":37,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"from cinder.tests import fake_flags"},{"line_number":40,"context_line":"from cinder.volume import iscsi"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FePw%3D","line":39,"updated":"2013-01-21 07:03:31.000000000","message":"iscsi not used","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":36,"context_line":"from cinder.openstack.common import importutils"},{"line_number":37,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"from cinder.tests import fake_flags"},{"line_number":40,"context_line":"from cinder.volume import iscsi"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FbuM%3D","line":39,"in_reply_to":"AAAAM3%2F%2FePw%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from cinder.tests import fake_flags"},{"line_number":40,"context_line":"from cinder.volume import iscsi"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"from swiftclient import client as swift"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"FLAGS \u003d flags.FLAGS"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FePs%3D","line":42,"updated":"2013-01-21 07:03:31.000000000","message":"swift not used.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":39,"context_line":"from cinder.tests import fake_flags"},{"line_number":40,"context_line":"from cinder.volume import iscsi"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"from swiftclient import client as swift"},{"line_number":44,"context_line":""},{"line_number":45,"context_line":"FLAGS \u003d flags.FLAGS"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FbuE%3D","line":42,"in_reply_to":"AAAAM3%2F%2FePs%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def _create_volume_db_entry(self, display_name\u003d\u0027test_volume\u0027,"},{"line_number":96,"context_line":"                                display_description\u003d\u0027this is a test volume\u0027,"},{"line_number":97,"context_line":"                                status\u003d\u0027backing-up\u0027,"},{"line_number":98,"context_line":"                                size\u003d0):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Create a volume entry in the DB."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FePg%3D","line":97,"updated":"2013-01-21 07:03:31.000000000","message":"volume size 0 is not allowed in cinder.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"    def _create_volume_db_entry(self, display_name\u003d\u0027test_volume\u0027,"},{"line_number":96,"context_line":"                                display_description\u003d\u0027this is a test volume\u0027,"},{"line_number":97,"context_line":"                                status\u003d\u0027backing-up\u0027,"},{"line_number":98,"context_line":"                                size\u003d0):"},{"line_number":99,"context_line":"        \"\"\""},{"line_number":100,"context_line":"        Create a volume entry in the DB."}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FbuA%3D","line":97,"in_reply_to":"AAAAM3%2F%2FePg%3D","updated":"2013-01-23 18:17:04.000000000","message":"Changed to: size\u003d1","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        self.assertEquals(vol[\u0027status\u0027], \u0027error\u0027)"},{"line_number":225,"context_line":"        backup \u003d db.backup_get(self.ctxt, backup_id)"},{"line_number":226,"context_line":"        self.assertEquals(backup[\u0027status\u0027], \u0027error\u0027)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def test_restore_backup_with_error(self):"},{"line_number":229,"context_line":"        \"\"\"Test error handling when an error occurs during backup restore\"\"\""},{"line_number":230,"context_line":"        vol_id \u003d self._create_volume_db_entry(status\u003d\u0027restoring-backup\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeOw%3D","line":227,"updated":"2013-01-21 07:03:31.000000000","message":"maybe rename to test_restore_backup_with_driver_error","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":224,"context_line":"        self.assertEquals(vol[\u0027status\u0027], \u0027error\u0027)"},{"line_number":225,"context_line":"        backup \u003d db.backup_get(self.ctxt, backup_id)"},{"line_number":226,"context_line":"        self.assertEquals(backup[\u0027status\u0027], \u0027error\u0027)"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"    def test_restore_backup_with_error(self):"},{"line_number":229,"context_line":"        \"\"\"Test error handling when an error occurs during backup restore\"\"\""},{"line_number":230,"context_line":"        vol_id \u003d self._create_volume_db_entry(status\u003d\u0027restoring-backup\u0027,"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fbts%3D","line":227,"in_reply_to":"AAAAM3%2F%2FeOw%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                          backup_id)"},{"line_number":335,"context_line":"        backup \u003d db.backup_get(self.ctxt, backup_id)"},{"line_number":336,"context_line":"        self.assertEquals(backup[\u0027status\u0027], \u0027available\u0027)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def test_delete_backup(self):"},{"line_number":339,"context_line":"        \"\"\"Test normal backup deletion\"\"\""},{"line_number":340,"context_line":"        vol_id \u003d self._create_volume_db_entry(size\u003d1)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeOY%3D","line":337,"updated":"2013-01-21 07:03:31.000000000","message":"This is not a normal delete, it\u0027s testing for the backup not existing.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":334,"context_line":"                          backup_id)"},{"line_number":335,"context_line":"        backup \u003d db.backup_get(self.ctxt, backup_id)"},{"line_number":336,"context_line":"        self.assertEquals(backup[\u0027status\u0027], \u0027available\u0027)"},{"line_number":337,"context_line":""},{"line_number":338,"context_line":"    def test_delete_backup(self):"},{"line_number":339,"context_line":"        \"\"\"Test normal backup deletion\"\"\""},{"line_number":340,"context_line":"        vol_id \u003d self._create_volume_db_entry(size\u003d1)"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FarE%3D","line":337,"in_reply_to":"AAAAM3%2F%2FeOY%3D","updated":"2013-01-23 18:17:04.000000000","message":"The test case does a normal backup delete. As an additional check that the backup was actually deleted db.backup_get is called with the backup_id of the deleted backup and it ensures that a BackupNotFound exception is raised.","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"}],"cinder/tests/test_backup_swift.py":[{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Tests for Backup swift code."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import cinder"},{"line_number":21,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeOU%3D","line":18,"updated":"2013-01-21 07:03:31.000000000","message":"import order should be:\n\n1) stdlib\n2) third-party\n3) cinder\n\nhttps://github.com/openstack/cinder/blob/master/HACKING.rst","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":15,"context_line":"\"\"\""},{"line_number":16,"context_line":"Tests for Backup swift code."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import cinder"},{"line_number":21,"context_line":"import hashlib"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FbtU%3D","line":18,"in_reply_to":"AAAAM3%2F%2FeOU%3D","updated":"2013-01-23 18:17:04.000000000","message":"Done","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Tests for Backup swift code."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import cinder"},{"line_number":21,"context_line":"import hashlib"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeOQ%3D","line":19,"updated":"2013-01-21 07:03:31.000000000","message":"cinder is not used","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":16,"context_line":"Tests for Backup swift code."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"\"\"\""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"import cinder"},{"line_number":21,"context_line":"import hashlib"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FbtY%3D","line":19,"in_reply_to":"AAAAM3%2F%2FeOQ%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import hashlib"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder import context"},{"line_number":24,"context_line":"from cinder import db"},{"line_number":25,"context_line":"from cinder import exception"},{"line_number":26,"context_line":"from cinder import flags"},{"line_number":27,"context_line":"from cinder import test"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeOM%3D","line":24,"updated":"2013-01-21 07:03:31.000000000","message":"exception is not used","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":21,"context_line":"import hashlib"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"from cinder import context"},{"line_number":24,"context_line":"from cinder import db"},{"line_number":25,"context_line":"from cinder import exception"},{"line_number":26,"context_line":"from cinder import flags"},{"line_number":27,"context_line":"from cinder import test"}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2Fbtc%3D","line":24,"in_reply_to":"AAAAM3%2F%2FeOM%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"57bca681e48b6cda9e471d55fb8224c4ddb6f0eb","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from cinder import test"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"from cinder.tests import fake_flags"},{"line_number":32,"context_line":"from cinder.tests.fake_swift_client import FakeSwiftClient"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FeOI%3D","line":30,"updated":"2013-01-21 07:03:31.000000000","message":"fake_flags not used","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"54f2c7f17e0f0bb25c491edadb14d73238aa6a56","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from cinder import test"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"from cinder.tests import fake_flags"},{"line_number":32,"context_line":"from cinder.tests.fake_swift_client import FakeSwiftClient"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"AAAAM3%2F%2FbtM%3D","line":30,"in_reply_to":"AAAAM3%2F%2FeOI%3D","updated":"2013-01-23 18:17:04.000000000","message":"Removed","commit_id":"871b7ef0281434aa5df45a8bf23e5e79153be124"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"801e0483ce9488a751218e8c6839e38e34dd47cd","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":27,"context_line":"from cinder import test"},{"line_number":28,"context_line":"from cinder.tests.backup.fake_swift_client import FakeSwiftClient"},{"line_number":29,"context_line":"from swiftclient import client as swift"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"FLAGS \u003d flags.FLAGS"},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FWOk%3D","line":29,"updated":"2013-01-27 00:30:42.000000000","message":"swiftclient should be moved with the third party modules which would be the second group.\n\n1) stdlib 2) third-party 3) cinder","commit_id":"5e08f0b55fa8fb2e4ad70b27e878d67e457ac3b8"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"68f36283f2aac01f115ccd685314e355acce6d0a","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from cinder.openstack.common import log as logging"},{"line_number":27,"context_line":"from cinder import test"},{"line_number":28,"context_line":"from cinder.tests.backup.fake_swift_client import FakeSwiftClient"},{"line_number":29,"context_line":"from swiftclient import client as swift"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"FLAGS \u003d flags.FLAGS"},{"line_number":32,"context_line":"LOG \u003d logging.getLogger(__name__)"}],"source_content_type":"text/x-python","patch_set":14,"id":"AAAAM3%2F%2FQGQ%3D","line":29,"in_reply_to":"AAAAM3%2F%2FWOk%3D","updated":"2013-01-31 18:58:06.000000000","message":"Done","commit_id":"5e08f0b55fa8fb2e4ad70b27e878d67e457ac3b8"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"12ee7a6d3cd3464e3c11f5a6f165ab2a7848545c","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def tearDown(self):"},{"line_number":71,"context_line":"        super(BackupSwiftTestCase, self).tearDown()"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def test_backup(self):"},{"line_number":74,"context_line":"        service \u003d SwiftBackupService(self.ctxt)"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAAM3%2F%2FMaA%3D","line":72,"updated":"2013-02-04 05:47:56.000000000","message":"Waiting on those additional unit tests as discussed in patchset 12","commit_id":"d86711045e845f9cf0bca149c74ad29148efce71"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"1f9747376658dafdba9b52de1ea9b52e114ccd5f","unresolved":false,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"    def tearDown(self):"},{"line_number":71,"context_line":"        super(BackupSwiftTestCase, self).tearDown()"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":"    def test_backup(self):"},{"line_number":74,"context_line":"        service \u003d SwiftBackupService(self.ctxt)"},{"line_number":75,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"AAAAM3%2F%2B33k%3D","line":72,"updated":"2013-02-15 21:04:48.000000000","message":"Waiting on those additional unit tests as discussed in patchset 12","commit_id":"73c9d0c907cb0795a7eb562c062110b82e49594c"}],"cinder/volume/driver.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f5f245c6d497ae937ffb850788c24bbc1cb45054","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def restore_backup(self, context, backup, volume, backup_service):"},{"line_number":185,"context_line":"        \"\"\"Restore an existing backup to a new or existing volume.\"\"\""},{"line_number":186,"context_line":"        raise NotImplementedError()"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"class ISCSIDriver(VolumeDriver):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fhec%3D","line":186,"updated":"2013-01-17 15:37:13.000000000","message":"We should probably make generic functions for these too once the copy image\u003c-\u003evolume patch gets merged...","commit_id":"73136f08302c030a6f4de44225385b67f751a12b"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"648436c179b0804cc06b26037d94890fde484c4d","unresolved":false,"context_lines":[{"line_number":183,"context_line":""},{"line_number":184,"context_line":"    def restore_backup(self, context, backup, volume, backup_service):"},{"line_number":185,"context_line":"        \"\"\"Restore an existing backup to a new or existing volume.\"\"\""},{"line_number":186,"context_line":"        raise NotImplementedError()"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":""},{"line_number":189,"context_line":"class ISCSIDriver(VolumeDriver):"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Ff0w%3D","line":186,"in_reply_to":"AAAAM3%2F%2Fhec%3D","updated":"2013-01-18 16:39:33.000000000","message":"Not sure what you mean by generic functions. I suggest we look at it again when the copy image volume patch is merged, the need for these generic functions may be clearer then","commit_id":"73136f08302c030a6f4de44225385b67f751a12b"}],"cinder/volume/drivers/lvm.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"f5f245c6d497ae937ffb850788c24bbc1cb45054","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            with utils.file_open(volume_path, \u0027wb\u0027) as volume_file:"},{"line_number":267,"context_line":"                backup_service.restore(backup, volume[\u0027id\u0027], volume_file)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def backup_volume(self, context, backup, backup_service):"},{"line_number":270,"context_line":"        \"\"\"Create a new backup from an existing volume.\"\"\""},{"line_number":271,"context_line":"        volume \u003d self.db.volume_get(context, backup[\u0027volume_id\u0027])"},{"line_number":272,"context_line":"        volume_path \u003d self.local_path(volume)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2Fhek%3D","line":269,"updated":"2013-01-17 15:37:13.000000000","message":"Two copies of these functions?","commit_id":"73136f08302c030a6f4de44225385b67f751a12b"},{"author":{"_account_id":4961,"name":"francis-moorehead","email":"francis.moorehead@hp.com","username":"francis-moorehead"},"change_message_id":"648436c179b0804cc06b26037d94890fde484c4d","unresolved":false,"context_lines":[{"line_number":266,"context_line":"            with utils.file_open(volume_path, \u0027wb\u0027) as volume_file:"},{"line_number":267,"context_line":"                backup_service.restore(backup, volume[\u0027id\u0027], volume_file)"},{"line_number":268,"context_line":""},{"line_number":269,"context_line":"    def backup_volume(self, context, backup, backup_service):"},{"line_number":270,"context_line":"        \"\"\"Create a new backup from an existing volume.\"\"\""},{"line_number":271,"context_line":"        volume \u003d self.db.volume_get(context, backup[\u0027volume_id\u0027])"},{"line_number":272,"context_line":"        volume_path \u003d self.local_path(volume)"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAAM3%2F%2FfzU%3D","line":269,"in_reply_to":"AAAAM3%2F%2Fhek%3D","updated":"2013-01-18 16:39:33.000000000","message":"Fixed. Deleted the second copies of backup_volume and restore_backup.","commit_id":"73136f08302c030a6f4de44225385b67f751a12b"}]}
