)]}'
{"nova/virt/disk/api.py":[{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"21ef0f25e4c508ee20cd6e191cba409be94c69eb","unresolved":false,"context_lines":[{"line_number":402,"context_line":"        # Make sure container_root_device is released when teardown container."},{"line_number":403,"context_line":"        if container_root_device:"},{"line_number":404,"context_line":"            if \u0027loop\u0027 in container_root_device:"},{"line_number":405,"context_line":"                LOG.debug(_(\"Release loop device %s\"), container_root_device)"},{"line_number":406,"context_line":"                utils.execute(\u0027losetup\u0027, \u0027--detach\u0027, container_root_device,"},{"line_number":407,"context_line":"                              run_as_root\u003dTrue, attempts\u003d3)"},{"line_number":408,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2Fsbs%3D","side":"PARENT","line":405,"updated":"2014-03-04 16:35:10.000000000","message":"Not necessarily something we need to address in this patch, but I really hate that we\u0027re calling `losetup` directly here; this should be abstracted away by the mounter.","commit_id":"4e4369151ef8a4423c7e9381a337474e0bd5611c"}],"nova/virt/disk/mount/api.py":[{"author":{"_account_id":4912,"name":"Michael H Wilson","email":"geekinutah@gmail.com","username":"geekinutah"},"change_message_id":"19f4b3f610ab9b8bd4bd6e5eb5f15cc53535ef77","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            LOG.debug(_(\"Using NoopMount\"))"},{"line_number":50,"context_line":"            return importutils.import_object("},{"line_number":51,"context_line":"                \"nova.virt.disk.mount.noop.NoopMount\","},{"line_number":52,"context_line":"                imgfile, mountdir, partition)"},{"line_number":53,"context_line":"        elif imgfmt \u003d\u003d \"raw\":"},{"line_number":54,"context_line":"            LOG.debug(_(\"Using LoopMount\"))"},{"line_number":55,"context_line":"            return importutils.import_object("}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2FyN0%3D","line":52,"updated":"2014-03-13 20:30:37.000000000","message":"Can we check for lvm as the imagebackend type instead of the noop_mount argument? If so we could avoid alot of passing noop_mount around. It would be less code to touch.","commit_id":"4c9323aaa69c5abfd058c9dde1b068d5fe05f50e"},{"author":{"_account_id":4912,"name":"Michael H Wilson","email":"geekinutah@gmail.com","username":"geekinutah"},"change_message_id":"83ed3fc40ac2c2336b584dc3785849265b05cfdb","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            LOG.debug(_(\"Using NoopMount\"))"},{"line_number":50,"context_line":"            return importutils.import_object("},{"line_number":51,"context_line":"                \"nova.virt.disk.mount.noop.NoopMount\","},{"line_number":52,"context_line":"                imgfile, mountdir, partition)"},{"line_number":53,"context_line":"        elif imgfmt \u003d\u003d \"raw\":"},{"line_number":54,"context_line":"            LOG.debug(_(\"Using LoopMount\"))"},{"line_number":55,"context_line":"            return importutils.import_object("}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2Fp%2BU%3D","line":52,"in_reply_to":"AAAAWH%2F%2FrMQ%3D","updated":"2014-03-14 17:37:30.000000000","message":"That makes sense, you wouldn\u0027t want to tie it ti imagebackend then.... hmmm... I still wish we didn\u0027t have to pass the arg around so much. Seems like this should be identifiable by the image still....","commit_id":"4c9323aaa69c5abfd058c9dde1b068d5fe05f50e"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"26d2f0b2b6174838b69f0142bc4b223658004790","unresolved":false,"context_lines":[{"line_number":49,"context_line":"            LOG.debug(_(\"Using NoopMount\"))"},{"line_number":50,"context_line":"            return importutils.import_object("},{"line_number":51,"context_line":"                \"nova.virt.disk.mount.noop.NoopMount\","},{"line_number":52,"context_line":"                imgfile, mountdir, partition)"},{"line_number":53,"context_line":"        elif imgfmt \u003d\u003d \"raw\":"},{"line_number":54,"context_line":"            LOG.debug(_(\"Using LoopMount\"))"},{"line_number":55,"context_line":"            return importutils.import_object("}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2FrMQ%3D","line":52,"in_reply_to":"AAAAWH%2F%2FyN0%3D","updated":"2014-03-14 15:30:57.000000000","message":"So, I believe the issue is that we need to support multiple types of mounts, not just the proper mount for the currently configured image backend. For instance if a compute node has instances running that were created when qcow2 was set as the image type, and then the image type is set to lvm. New instances will have lvm backed disks, but old instances will have qcow2/nbd backed disks... If this is not the case though, I can switch it to just using the image type config instead of passing the noop_mount arg everywhere.","commit_id":"4c9323aaa69c5abfd058c9dde1b068d5fe05f50e"},{"author":{"_account_id":4912,"name":"Michael H Wilson","email":"geekinutah@gmail.com","username":"geekinutah"},"change_message_id":"19f4b3f610ab9b8bd4bd6e5eb5f15cc53535ef77","unresolved":false,"context_lines":[{"line_number":115,"context_line":"                if \u0027p\u0027 in device:"},{"line_number":116,"context_line":"                    device, self.partition \u003d device.rsplit(\u0027p\u0027, 1)"},{"line_number":117,"context_line":"                    self.device \u003d os.path.join(\u0027/dev\u0027, device)"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    def get_dev(self):"},{"line_number":120,"context_line":"        \"\"\"Make the image available as a block device in the file system.\"\"\""},{"line_number":121,"context_line":"        self.device \u003d None"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2FyQE%3D","line":118,"updated":"2014-03-13 20:30:37.000000000","message":"See http://paste.openstack.org/show/73452/, although this bug is in other places it would be nice to fix it here. Basically we can\u0027t always rely on the \u0027p\u0027 being there.","commit_id":"4c9323aaa69c5abfd058c9dde1b068d5fe05f50e"}],"nova/virt/disk/mount/noop.py":[{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"21ef0f25e4c508ee20cd6e191cba409be94c69eb","unresolved":false,"context_lines":[{"line_number":16,"context_line":"from nova.virt.disk.mount import api"},{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class NoopMount(api.Mount):"},{"line_number":20,"context_line":"    \"\"\"LVM images are already mounted, thus don\u0027t need further mounting.\"\"\""},{"line_number":21,"context_line":"    mode \u003d \u0027noop\u0027"},{"line_number":22,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FsWs%3D","line":19,"updated":"2014-03-04 16:35:10.000000000","message":"Again, not something for this patch, but it\u0027s really inelegant that these particular methods have to be overriden like this for a NOOP mounter.\n\nReally sort of a code smell, more than anything.","commit_id":"070c5be72af299461ad1f0d2880dc77fe3a1fb80"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a480f2cfabaab731d3da1a382bce5e37ee89940","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class NoopMount(api.Mount):"},{"line_number":20,"context_line":"    \"\"\"LVM images are already mounted, thus don\u0027t need further mounting.\"\"\""},{"line_number":21,"context_line":"    mode \u003d \u0027noop\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def _inner_get_dev(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2Fyhw%3D","line":20,"updated":"2014-03-13 19:53:09.000000000","message":"This is being used for LVM images but doesn\u0027t necessarily need to be restricted to LVM images, right?  Could be used by image Foo in the future, so maybe remove LVM from the docstring.","commit_id":"4c9323aaa69c5abfd058c9dde1b068d5fe05f50e"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"26d2f0b2b6174838b69f0142bc4b223658004790","unresolved":false,"context_lines":[{"line_number":17,"context_line":""},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"class NoopMount(api.Mount):"},{"line_number":20,"context_line":"    \"\"\"LVM images are already mounted, thus don\u0027t need further mounting.\"\"\""},{"line_number":21,"context_line":"    mode \u003d \u0027noop\u0027"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"    def _inner_get_dev(self):"}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2FrOo%3D","line":20,"in_reply_to":"AAAAWH%2F%2Fyhw%3D","updated":"2014-03-14 15:30:57.000000000","message":"Done","commit_id":"4c9323aaa69c5abfd058c9dde1b068d5fe05f50e"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"9a480f2cfabaab731d3da1a382bce5e37ee89940","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        return True"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def get_dev(self):"},{"line_number":29,"context_line":"        # NOTE(mikal): the retry is required here in case we are low on loop"},{"line_number":30,"context_line":"        # devices. Note however that modern kernels will use more loop devices"},{"line_number":31,"context_line":"        # if they exist. If you\u0027re seeing lots of retries, consider adding"},{"line_number":32,"context_line":"        # more devices."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2Fyg0%3D","line":29,"updated":"2014-03-13 19:53:09.000000000","message":"Where did this note come from?  Is it really needed for noop?","commit_id":"4c9323aaa69c5abfd058c9dde1b068d5fe05f50e"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"26d2f0b2b6174838b69f0142bc4b223658004790","unresolved":false,"context_lines":[{"line_number":26,"context_line":"        return True"},{"line_number":27,"context_line":""},{"line_number":28,"context_line":"    def get_dev(self):"},{"line_number":29,"context_line":"        # NOTE(mikal): the retry is required here in case we are low on loop"},{"line_number":30,"context_line":"        # devices. Note however that modern kernels will use more loop devices"},{"line_number":31,"context_line":"        # if they exist. If you\u0027re seeing lots of retries, consider adding"},{"line_number":32,"context_line":"        # more devices."}],"source_content_type":"text/x-python","patch_set":3,"id":"AAAAWH%2F%2Fye4%3D","line":29,"in_reply_to":"AAAAWH%2F%2Fyg0%3D","updated":"2014-03-14 15:30:57.000000000","message":"This was a hold over from the nbp/loop drivers. I\u0027ve just moved everything from _inner_get_dev here.","commit_id":"4c9323aaa69c5abfd058c9dde1b068d5fe05f50e"}],"nova/virt/libvirt/driver.py":[{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"21ef0f25e4c508ee20cd6e191cba409be94c69eb","unresolved":false,"context_lines":[{"line_number":3421,"context_line":"            container_root_device \u003d disk.setup_container(image.path,"},{"line_number":3422,"context_line":"                                                container_dir\u003dcontainer_dir,"},{"line_number":3423,"context_line":"                                                use_cow\u003dCONF.use_cow_images,"},{"line_number":3424,"context_line":"                                                use_noop\u003dimage.noop_mount)"},{"line_number":3425,"context_line":""},{"line_number":3426,"context_line":"            #Note(GuanQiang): save container root device name here, used for"},{"line_number":3427,"context_line":"            #                 detaching the linked image device when deleting"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FsZ0%3D","line":3424,"updated":"2014-03-04 16:35:10.000000000","message":"For consistency, would it be better to just use `noop_mount\u003dimage.noop_mount`?","commit_id":"070c5be72af299461ad1f0d2880dc77fe3a1fb80"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"9eb090868c6d2d0ec624c1acf63de2f30e53d372","unresolved":false,"context_lines":[{"line_number":3421,"context_line":"            container_root_device \u003d disk.setup_container(image.path,"},{"line_number":3422,"context_line":"                                                container_dir\u003dcontainer_dir,"},{"line_number":3423,"context_line":"                                                use_cow\u003dCONF.use_cow_images,"},{"line_number":3424,"context_line":"                                                use_noop\u003dimage.noop_mount)"},{"line_number":3425,"context_line":""},{"line_number":3426,"context_line":"            #Note(GuanQiang): save container root device name here, used for"},{"line_number":3427,"context_line":"            #                 detaching the linked image device when deleting"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FUfk%3D","line":3424,"in_reply_to":"AAAAVn%2F%2FsZ0%3D","updated":"2014-03-06 21:06:03.000000000","message":"Done","commit_id":"070c5be72af299461ad1f0d2880dc77fe3a1fb80"}],"nova/virt/libvirt/imagebackend.py":[{"author":{"_account_id":475,"name":"Rick Harris","email":"rick.harris@rackspace.com","username":"rconradharris"},"change_message_id":"21ef0f25e4c508ee20cd6e191cba409be94c69eb","unresolved":false,"context_lines":[{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def __init__(self, instance\u003dNone, disk_name\u003dNone, path\u003dNone):"},{"line_number":352,"context_line":"        super(Lvm, self).__init__(\"block\", \"raw\", is_block_dev\u003dTrue)"},{"line_number":353,"context_line":"        self.noop_mount \u003d True"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        if path:"},{"line_number":356,"context_line":"            info \u003d libvirt_utils.logical_volume_info(path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FsX0%3D","line":353,"updated":"2014-03-04 16:35:10.000000000","message":"This is something that\u0027s not going to a vary on a per-instance basis, but on a per-class basis, so might make more sense as a class variable:","commit_id":"070c5be72af299461ad1f0d2880dc77fe3a1fb80"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"9eb090868c6d2d0ec624c1acf63de2f30e53d372","unresolved":false,"context_lines":[{"line_number":350,"context_line":""},{"line_number":351,"context_line":"    def __init__(self, instance\u003dNone, disk_name\u003dNone, path\u003dNone):"},{"line_number":352,"context_line":"        super(Lvm, self).__init__(\"block\", \"raw\", is_block_dev\u003dTrue)"},{"line_number":353,"context_line":"        self.noop_mount \u003d True"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"        if path:"},{"line_number":356,"context_line":"            info \u003d libvirt_utils.logical_volume_info(path)"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAVn%2F%2FUfg%3D","line":353,"in_reply_to":"AAAAVn%2F%2FsX0%3D","updated":"2014-03-06 21:06:03.000000000","message":"Done","commit_id":"070c5be72af299461ad1f0d2880dc77fe3a1fb80"}]}
