)]}'
{"nova/virt/xenapi/image/vdi_through_dev.py":[{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"c75ecf1e35f686d3cd98d6b77653c75c1f41f1b5","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from nova.virt.xenapi import vm_utils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class VdiThroughDev(object):"},{"line_number":31,"context_line":"    \"\"\"Deal with virtual disks by attaching them to the OS domU."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    At the moment it supports upload to Glance, and the upload format is a raw"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAARn%2F%2F5FI%3D","line":30,"updated":"2013-08-20 15:46:43.000000000","message":"By convention, these driver classes are suffixed with \u0027Store\u0027, e.g.\n\nVdiThroughDevStore.\n\nDefinitely sounds a little weird, but might be worth maintaining the consistent naming scheme.","commit_id":"28a025524d5e50275a514a83eee6c4a29ef9d58c"},{"author":{"_account_id":5044,"name":"Mate Lakat","email":"mlakat@suse.com","username":"mate-lakat"},"change_message_id":"5917a06503ea91575afff334bce659fd09333696","unresolved":false,"context_lines":[{"line_number":27,"context_line":"from nova.virt.xenapi import vm_utils"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"class VdiThroughDev(object):"},{"line_number":31,"context_line":"    \"\"\"Deal with virtual disks by attaching them to the OS domU."},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"    At the moment it supports upload to Glance, and the upload format is a raw"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAARn%2F%2F1ig%3D","line":30,"in_reply_to":"AAAARn%2F%2F5FI%3D","updated":"2013-08-21 11:02:18.000000000","message":"ok.","commit_id":"28a025524d5e50275a514a83eee6c4a29ef9d58c"},{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"c75ecf1e35f686d3cd98d6b77653c75c1f41f1b5","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        command \u003d UploadToGlanceAsRawTgz("},{"line_number":39,"context_line":"            context, session, instance, vdi_uuids, image_id)"},{"line_number":40,"context_line":"        return command.upload_image()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class UploadToGlanceAsRawTgz(object):"},{"line_number":44,"context_line":"    def __init__(self, context, session, instance, vdi_uuids, image_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAARn%2F%2F5Eo%3D","line":41,"updated":"2013-08-20 15:46:43.000000000","message":"Just for clarity, might be nice to define a \u0027download_image\u0027 and explicitly raise a NotImplementedError, just to make sure this class confirms to the (implicit) interface.","commit_id":"28a025524d5e50275a514a83eee6c4a29ef9d58c"},{"author":{"_account_id":5044,"name":"Mate Lakat","email":"mlakat@suse.com","username":"mate-lakat"},"change_message_id":"5917a06503ea91575afff334bce659fd09333696","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        command \u003d UploadToGlanceAsRawTgz("},{"line_number":39,"context_line":"            context, session, instance, vdi_uuids, image_id)"},{"line_number":40,"context_line":"        return command.upload_image()"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"class UploadToGlanceAsRawTgz(object):"},{"line_number":44,"context_line":"    def __init__(self, context, session, instance, vdi_uuids, image_id):"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAARn%2F%2F1hk%3D","line":41,"in_reply_to":"AAAARn%2F%2F5Eo%3D","updated":"2013-08-21 11:02:18.000000000","message":"ok.","commit_id":"28a025524d5e50275a514a83eee6c4a29ef9d58c"},{"author":{"_account_id":8430,"name":"Christopher Lefelhocz","email":"christopher.lefelhoc@rackspace.com","username":"leif"},"change_message_id":"ec07b16e6748729937720df2b06fb54229f6e374","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        tinfo.size \u003d int(self.size)"},{"line_number":106,"context_line":"        with self._open_file(self.fpath, \u0027rb\u0027) as input_file:"},{"line_number":107,"context_line":"            tfile.addfile(tinfo, fileobj\u003dinput_file)"},{"line_number":108,"context_line":"            input_file.close()"},{"line_number":109,"context_line":"        tfile.close()"},{"line_number":110,"context_line":"        self.output.close()"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAARn%2F%2F4lU%3D","line":108,"updated":"2013-08-20 17:31:47.000000000","message":"Any chance the open, addfile, closes fail in some strange way?  If so do we leave things in a broken state?","commit_id":"28a025524d5e50275a514a83eee6c4a29ef9d58c"},{"author":{"_account_id":5044,"name":"Mate Lakat","email":"mlakat@suse.com","username":"mate-lakat"},"change_message_id":"5917a06503ea91575afff334bce659fd09333696","unresolved":false,"context_lines":[{"line_number":105,"context_line":"        tinfo.size \u003d int(self.size)"},{"line_number":106,"context_line":"        with self._open_file(self.fpath, \u0027rb\u0027) as input_file:"},{"line_number":107,"context_line":"            tfile.addfile(tinfo, fileobj\u003dinput_file)"},{"line_number":108,"context_line":"            input_file.close()"},{"line_number":109,"context_line":"        tfile.close()"},{"line_number":110,"context_line":"        self.output.close()"},{"line_number":111,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAARn%2F%2F1jk%3D","line":108,"in_reply_to":"AAAARn%2F%2F4lU%3D","updated":"2013-08-21 11:02:18.000000000","message":"- open is delegated to the builtin open, and used as a context manager, so that\u0027s safe\n- addfile happens inside the context, so in case of error, I expect the file to be closed\n- error in tfile.close() might be a problem\n\nI\u0027m gonna cover that case with tests.","commit_id":"28a025524d5e50275a514a83eee6c4a29ef9d58c"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"9fc95b576cd56ab8d6eee95b9b0630d3ac6ceb01","unresolved":false,"context_lines":[{"line_number":62,"context_line":""},{"line_number":63,"context_line":"    def _get_image_stream(self, devpath):"},{"line_number":64,"context_line":"        size \u003d self._get_virtual_size()"},{"line_number":65,"context_line":"        proc \u003d subprocess.Popen([\u0027create-targz\u0027, devpath, size, \u0027disk.raw\u0027],"},{"line_number":66,"context_line":"                                stdout\u003dsubprocess_orig.PIPE)"},{"line_number":67,"context_line":"        return proc.stdout"},{"line_number":68,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"AAAASX%2F%2F7bo%3D","line":65,"updated":"2013-08-23 16:08:16.000000000","message":"What is create-targz?","commit_id":"397789faf6ce7b5effe4f0cf3feb7708d16aa675"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"c7c40d16c408cb9d8b76c3113171fe24fa5544e3","unresolved":false,"context_lines":[{"line_number":119,"context_line":"    def start(self):"},{"line_number":120,"context_line":"        image_service, image_id \u003d ("},{"line_number":121,"context_line":"            glance.get_remote_image_service(self.context, self.image_id))"},{"line_number":122,"context_line":"        image_service.update(self.context, image_id, self.metadata,"},{"line_number":123,"context_line":"                             self.image_stream, purge_props\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAASn%2F%2FlBY%3D","line":122,"updated":"2013-09-03 09:28:46.000000000","message":"I am not sure why we don\u0027t have this in nova.image?","commit_id":"ef8017ff798c2a1bc548af6f0356b1aab3cfb0e2"}]}
