)]}'
{"nova/virt/disk/api.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"41b7e58b93eae06fe08229efa6a2cb9dd5cff06a","unresolved":false,"context_lines":[{"line_number":474,"context_line":"                LOG.debug(\u0027Release nbd device %s\u0027, container_root_device)"},{"line_number":475,"context_line":"                utils.execute(\u0027qemu-nbd\u0027, \u0027-d\u0027, container_root_device,"},{"line_number":476,"context_line":"                              run_as_root\u003dTrue)"},{"line_number":477,"context_line":"            elif \u0027mapper\u0027 in container_root_device:"},{"line_number":478,"context_line":"                LOG.debug(\u0027No release necessary for block device %s\u0027 %"},{"line_number":479,"context_line":"                          container_root_device)"},{"line_number":480,"context_line":"    except Exception:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_48a44bb8","line":477,"updated":"2015-08-24 12:39:51.000000000","message":"I don\u0027t think we need to be checking \u0027mapper\u0027 here - just have an general \u0027else\u0027","commit_id":"49a179b834261f335a1116ae8a1e930479b4c373"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"18acd98cde26691e71eb08c7e1826d9bb080e4de","unresolved":false,"context_lines":[{"line_number":474,"context_line":"                LOG.debug(\u0027Release nbd device %s\u0027, container_root_device)"},{"line_number":475,"context_line":"                utils.execute(\u0027qemu-nbd\u0027, \u0027-d\u0027, container_root_device,"},{"line_number":476,"context_line":"                              run_as_root\u003dTrue)"},{"line_number":477,"context_line":"            elif \u0027mapper\u0027 in container_root_device:"},{"line_number":478,"context_line":"                LOG.debug(\u0027No release necessary for block device %s\u0027 %"},{"line_number":479,"context_line":"                          container_root_device)"},{"line_number":480,"context_line":"    except Exception:"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_d8f902ca","line":477,"in_reply_to":"fa1b9901_48a44bb8","updated":"2015-08-24 15:57:03.000000000","message":"Done","commit_id":"49a179b834261f335a1116ae8a1e930479b4c373"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"9b301588963a9cb196c1dd5dfa9b1d6ac5b6f2a0","unresolved":false,"context_lines":[{"line_number":474,"context_line":"                LOG.debug(\u0027Release nbd device %s\u0027, container_root_device)"},{"line_number":475,"context_line":"                utils.execute(\u0027qemu-nbd\u0027, \u0027-d\u0027, container_root_device,"},{"line_number":476,"context_line":"                              run_as_root\u003dTrue)"},{"line_number":477,"context_line":"            else:"},{"line_number":478,"context_line":"                LOG.debug(\u0027No release necessary for block device %s\u0027 %"},{"line_number":479,"context_line":"                          container_root_device)"},{"line_number":480,"context_line":"    except Exception:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_c88fc0ca","line":477,"updated":"2015-08-28 16:50:44.000000000","message":"Should we also update test_lxc_teardown_container for this case?","commit_id":"2809655349794f403802d4faf269f8287b500717"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"4973713341abcaaeb0d912e8fdc6838f695e97da","unresolved":false,"context_lines":[{"line_number":475,"context_line":"                utils.execute(\u0027qemu-nbd\u0027, \u0027-d\u0027, container_root_device,"},{"line_number":476,"context_line":"                              run_as_root\u003dTrue)"},{"line_number":477,"context_line":"            else:"},{"line_number":478,"context_line":"                LOG.debug(\u0027No release necessary for block device %s\u0027 %"},{"line_number":479,"context_line":"                          container_root_device)"},{"line_number":480,"context_line":"    except Exception:"},{"line_number":481,"context_line":"        LOG.exception(_LE(\u0027Failed to teardown container filesystem\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_0dfa8f75","line":478,"updated":"2015-08-25 21:08:46.000000000","message":"Confirmed that we are at least getting here:\n\nhttp://logs.openstack.org/33/215733/3/check/gate-tempest-dsvm-full/50241c8/logs/screen-n-cpu.txt.gz#_2015-08-24_20_03_26_316","commit_id":"2809655349794f403802d4faf269f8287b500717"},{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"cb166ec0889a9a217d8fa79f774c3722fc97f054","unresolved":false,"context_lines":[{"line_number":475,"context_line":"                utils.execute(\u0027qemu-nbd\u0027, \u0027-d\u0027, container_root_device,"},{"line_number":476,"context_line":"                              run_as_root\u003dTrue)"},{"line_number":477,"context_line":"            else:"},{"line_number":478,"context_line":"                LOG.debug(\u0027No release necessary for block device %s\u0027 %"},{"line_number":479,"context_line":"                          container_root_device)"},{"line_number":480,"context_line":"    except Exception:"},{"line_number":481,"context_line":"        LOG.exception(_LE(\u0027Failed to teardown container filesystem\u0027))"}],"source_content_type":"text/x-python","patch_set":4,"id":"fa1b9901_b7e87bb4","line":478,"in_reply_to":"fa1b9901_0dfa8f75","updated":"2015-08-26 09:11:07.000000000","message":"That\u0027s the last thing that\u0027s done in disk cleanup - the unmount takes place in the img.teardown() steps a few lines earlier, so that log message shows this particular instance (f3df0134-18ac-4824-a9b8-cd4ddd8be050) has gone away successfully.\n\nThere are 2 other instance shutdowns that are taking place concurrently though:\n\n2015-08-24 20:03:25.311 INFO nova.compute.manager [req-6c9f477b-da21-4a87-9e9f-c2c942d1404e tempest-FixedIPsTestJson-2032867055 tempest-FixedIPsTestJson-744328138] [instance: 591f0ef2-0310-48ff-9cb3-c4e028dc850b] Terminating instance\n\n2015-08-24 20:03:26.435 INFO nova.compute.manager [req-f0c04b71-1b9c-4409-9960-838f5fa5d5df tempest-AggregatesAdminTestJSON-327118637 tempest-AggregatesAdminTestJSON-942215492] [instance: 96138506-5275-4782-aa41-b3f894856b45] Terminating instance\n\n\nWHich don\u0027t appear to have the corresponding libvirt message\n\n2015-08-24 20:03:26.315 23220 INFO nova.virt.libvirt.driver [-] [instance: f3df0134-18ac-4824-a9b8-cd4ddd8be050] Instance destroyed successfully.\n\nSo AFAICT, this rules out this disk volume code as the problem - those other VMs haven\u0027t even got into this bit of code yet.","commit_id":"2809655349794f403802d4faf269f8287b500717"}],"nova/virt/disk/mount/api.py":[{"author":{"_account_id":1779,"name":"Daniel Berrange","email":"berrange@redhat.com","username":"berrange"},"change_message_id":"41b7e58b93eae06fe08229efa6a2cb9dd5cff06a","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            return importutils.import_object("},{"line_number":104,"context_line":"                \"nova.virt.disk.mount.nbd.NbdMount\","},{"line_number":105,"context_line":"                image, mountdir, partition, device)"},{"line_number":106,"context_line":"        elif \"mapper\" in device:"},{"line_number":107,"context_line":"            LOG.debug(\"Using BlockMount\")"},{"line_number":108,"context_line":"            return importutils.import_object("},{"line_number":109,"context_line":"                \"nova.virt.disk.mount.block.BlockMount\","}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_e8b3df08","line":106,"updated":"2015-08-24 12:39:51.000000000","message":"I\u0027m not sure we should be checking for \u0027mapper\u0027 in the path. This code path should be able to handle any path under /dev, so I think it is sufficient to replace the elif, with simply \u0027else\u0027","commit_id":"49a179b834261f335a1116ae8a1e930479b4c373"},{"author":{"_account_id":5387,"name":"Andrew Melton","email":"andrew.melton@rackspace.com","username":"andrew-melton"},"change_message_id":"18acd98cde26691e71eb08c7e1826d9bb080e4de","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            return importutils.import_object("},{"line_number":104,"context_line":"                \"nova.virt.disk.mount.nbd.NbdMount\","},{"line_number":105,"context_line":"                image, mountdir, partition, device)"},{"line_number":106,"context_line":"        elif \"mapper\" in device:"},{"line_number":107,"context_line":"            LOG.debug(\"Using BlockMount\")"},{"line_number":108,"context_line":"            return importutils.import_object("},{"line_number":109,"context_line":"                \"nova.virt.disk.mount.block.BlockMount\","}],"source_content_type":"text/x-python","patch_set":2,"id":"fa1b9901_f81ba61a","line":106,"in_reply_to":"fa1b9901_e8b3df08","updated":"2015-08-24 15:57:03.000000000","message":"Done","commit_id":"49a179b834261f335a1116ae8a1e930479b4c373"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"9b301588963a9cb196c1dd5dfa9b1d6ac5b6f2a0","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                    \"nova.virt.disk.mount.nbd.NbdMount\","},{"line_number":64,"context_line":"                    image, mountdir, partition)"},{"line_number":65,"context_line":"        elif isinstance(image, imgmodel.LocalBlockImage):"},{"line_number":66,"context_line":"            return importutils.import_object("},{"line_number":67,"context_line":"                    \"nova.virt.disk.mount.block.BlockMount\","},{"line_number":68,"context_line":"                    image, mountdir, partition)"},{"line_number":69,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_c3548322","line":66,"updated":"2015-08-28 16:50:44.000000000","message":"Why not to add here LOG.debug(...) as above?","commit_id":"2809655349794f403802d4faf269f8287b500717"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"f72f66a1cef75092cf203aaac6d5ad62f935cca7","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                    \"nova.virt.disk.mount.nbd.NbdMount\","},{"line_number":64,"context_line":"                    image, mountdir, partition)"},{"line_number":65,"context_line":"        elif isinstance(image, imgmodel.LocalBlockImage):"},{"line_number":66,"context_line":"            return importutils.import_object("},{"line_number":67,"context_line":"                    \"nova.virt.disk.mount.block.BlockMount\","},{"line_number":68,"context_line":"                    image, mountdir, partition)"},{"line_number":69,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_7918951e","line":66,"in_reply_to":"da20952f_c3548322","updated":"2015-08-31 05:17:18.000000000","message":"I think that\u0027s a fair point, but minor.","commit_id":"2809655349794f403802d4faf269f8287b500717"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"007285b15d51c29931d30572d95836355af731dd","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        if os.path.isabs(device) and os.path.exists(device):"},{"line_number":145,"context_line":"            if device.startswith(\u0027/dev/mapper/\u0027):"},{"line_number":146,"context_line":"                device \u003d os.path.basename(device)"},{"line_number":147,"context_line":"                if \u0027p\u0027 in device:"},{"line_number":148,"context_line":"                    device, self.partition \u003d device.rsplit(\u0027p\u0027, 1)"},{"line_number":149,"context_line":"                    self.device \u003d os.path.join(\u0027/dev\u0027, device)"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_723e9e8d","line":147,"updated":"2015-08-28 18:02:32.000000000","message":"device value is depended on CONF.libvirt.images_volume_group\n\nin devstack it\u0027s \u0027stack-volumes-default\u0027, and the device is /dev/mapper/stack--volumes--default--\u003cuuid\u003e-disk\n\nThis string doesn\u0027t contain \u0027p\u0027 char. But what if images_volume_group has it?","commit_id":"2809655349794f403802d4faf269f8287b500717"},{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"f72f66a1cef75092cf203aaac6d5ad62f935cca7","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        if os.path.isabs(device) and os.path.exists(device):"},{"line_number":145,"context_line":"            if device.startswith(\u0027/dev/mapper/\u0027):"},{"line_number":146,"context_line":"                device \u003d os.path.basename(device)"},{"line_number":147,"context_line":"                if \u0027p\u0027 in device:"},{"line_number":148,"context_line":"                    device, self.partition \u003d device.rsplit(\u0027p\u0027, 1)"},{"line_number":149,"context_line":"                    self.device \u003d os.path.join(\u0027/dev\u0027, device)"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_f9da654a","line":147,"in_reply_to":"da20952f_723e9e8d","updated":"2015-08-31 05:17:18.000000000","message":"Its not clear to me what this is testing for. At the very least I think a comment here which explains why a single character is special like this would be useful. Should this be a regexp? I just don\u0027t know because its unclear to me what this is doing.","commit_id":"2809655349794f403802d4faf269f8287b500717"},{"author":{"_account_id":10224,"name":"Feodor Tersin","email":"ftersin@hotmail.com","username":"ftersin"},"change_message_id":"bd5472e44a85730f6941a88b063cb1d9ab1facf6","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        if os.path.isabs(device) and os.path.exists(device):"},{"line_number":145,"context_line":"            if device.startswith(\u0027/dev/mapper/\u0027):"},{"line_number":146,"context_line":"                device \u003d os.path.basename(device)"},{"line_number":147,"context_line":"                if \u0027p\u0027 in device:"},{"line_number":148,"context_line":"                    device, self.partition \u003d device.rsplit(\u0027p\u0027, 1)"},{"line_number":149,"context_line":"                    self.device \u003d os.path.join(\u0027/dev\u0027, device)"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_fc6b33b7","line":147,"in_reply_to":"da20952f_f9da654a","updated":"2015-08-31 05:53:32.000000000","message":"@Michael, it tests for a partition type of \u0027device\u0027 coded in the string. E.g. see L66 in test_api.py. It\u0027s more than unclear. And i think it can lead to a bug (see my comment above).","commit_id":"2809655349794f403802d4faf269f8287b500717"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"572a9d4e3149dfdbd2583fbfff2a00c94b2dfd66","unresolved":false,"context_lines":[{"line_number":144,"context_line":"        if os.path.isabs(device) and os.path.exists(device):"},{"line_number":145,"context_line":"            if device.startswith(\u0027/dev/mapper/\u0027):"},{"line_number":146,"context_line":"                device \u003d os.path.basename(device)"},{"line_number":147,"context_line":"                if \u0027p\u0027 in device:"},{"line_number":148,"context_line":"                    device, self.partition \u003d device.rsplit(\u0027p\u0027, 1)"},{"line_number":149,"context_line":"                    self.device \u003d os.path.join(\u0027/dev\u0027, device)"},{"line_number":150,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"1a26ad4f_d2957ce4","line":147,"in_reply_to":"da20952f_fc6b33b7","updated":"2015-10-28 16:09:39.000000000","message":"Note the code was already specifically splitting on \u0027p\u0027:\n\ndevice, self.partition \u003d device.rsplit(\u0027p\u0027, 1)","commit_id":"2809655349794f403802d4faf269f8287b500717"},{"author":{"_account_id":16366,"name":"Randall Nortman","email":"openstack@nortman.net","username":"rnortman"},"change_message_id":"2a00b6f707fc98d27cd74b55c313643f4dcec3c1","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            if device.startswith(\u0027/dev/mapper/\u0027):"},{"line_number":147,"context_line":"                device \u003d os.path.basename(device)"},{"line_number":148,"context_line":"                if \u0027p\u0027 in device:"},{"line_number":149,"context_line":"                    device, self.partition \u003d device.rsplit(\u0027p\u0027, 1)"},{"line_number":150,"context_line":"                    self.device \u003d os.path.join(\u0027/dev\u0027, device)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def get_dev(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_59abbbd6","line":149,"updated":"2015-12-10 21:12:27.000000000","message":"Can we be a bit more conservative here to protect against odd things showing up in /dev/mapper?  On my workstation with LVM I see volume group names in the /dev/mapper entries, and those could definitely contain \u0027p\u0027.  I\u0027d propose matching against a regex like \u0027(.*)p(\\d+)$\u0027.  Group 1 of the match result will then have device and group 2 will have the partition.  This differs from the above in that it insists that the p be followed only by digits, so it won\u0027t pick up a \"p\" that\u0027s part of the device name.  We could be more strict and insist that the partition number is \u003c\u003d 15 (which I think is true everywhere?  but you never know...)","commit_id":"0e16afa588954d494165368a9eb331421c0bdcd6"},{"author":{"_account_id":7368,"name":"Thomas Maddox","email":"me@thomasem.net","username":"thomasm"},"change_message_id":"ad07d446bb2ed29859406a7e606c58569be18d61","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            if device.startswith(\u0027/dev/mapper/\u0027):"},{"line_number":147,"context_line":"                device \u003d os.path.basename(device)"},{"line_number":148,"context_line":"                if \u0027p\u0027 in device:"},{"line_number":149,"context_line":"                    device, self.partition \u003d device.rsplit(\u0027p\u0027, 1)"},{"line_number":150,"context_line":"                    self.device \u003d os.path.join(\u0027/dev\u0027, device)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def get_dev(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_f18b9b66","line":149,"in_reply_to":"7a740942_59abbbd6","updated":"2015-12-10 22:26:12.000000000","message":"If you look at the lines it\u0027s replacing, this is the status quo. fwiw. I\u0027m hesitant to deviate much from the status quo when it doesn\u0027t work towards fixing the bug this patch is here to fix. If you did know that, and still think that belongs in this patch, I\u0027m open to discuss it. Michael Still brought up a similar concern. I\u0027d also be happy to open a bug against it and reference this as something that needs to be fixed.","commit_id":"0e16afa588954d494165368a9eb331421c0bdcd6"},{"author":{"_account_id":16366,"name":"Randall Nortman","email":"openstack@nortman.net","username":"rnortman"},"change_message_id":"63f0a05d6ebb91d4f165a8d7cfe13f6316f226d8","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            if device.startswith(\u0027/dev/mapper/\u0027):"},{"line_number":147,"context_line":"                device \u003d os.path.basename(device)"},{"line_number":148,"context_line":"                if \u0027p\u0027 in device:"},{"line_number":149,"context_line":"                    device, self.partition \u003d device.rsplit(\u0027p\u0027, 1)"},{"line_number":150,"context_line":"                    self.device \u003d os.path.join(\u0027/dev\u0027, device)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def get_dev(self):"}],"source_content_type":"text/x-python","patch_set":8,"id":"7a740942_349fd151","line":149,"in_reply_to":"7a740942_f18b9b66","updated":"2015-12-10 22:57:15.000000000","message":"OK, if you\u0027re aware of it.  I think opening a bug and doing the change separately would be a good idea.","commit_id":"0e16afa588954d494165368a9eb331421c0bdcd6"}],"nova/virt/disk/mount/block.py":[{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"f72f66a1cef75092cf203aaac6d5ad62f935cca7","unresolved":false,"context_lines":[{"line_number":22,"context_line":""},{"line_number":23,"context_line":"class BlockMount(api.Mount):"},{"line_number":24,"context_line":"    \"\"\"Block device backed images do not need to be linked because"},{"line_number":25,"context_line":"       they are already exposed as block devices and can me mounted"},{"line_number":26,"context_line":"       directly."},{"line_number":27,"context_line":"    \"\"\""},{"line_number":28,"context_line":"    mode \u003d \u0027block\u0027"}],"source_content_type":"text/x-python","patch_set":4,"id":"da20952f_79ef35e9","line":25,"range":{"start_line":25,"start_character":16,"end_line":25,"end_character":23},"updated":"2015-08-31 05:17:18.000000000","message":"s/me/be/","commit_id":"2809655349794f403802d4faf269f8287b500717"}]}
