Hello Everyone,

I've been recently working on bug/1269990, re: "attached volumes to LXC are
being lost after reboot/power on", after fixing it, I've realized that the
initial attach volume to LXC operation is not functional at all. (bug/1330981)

I've described the problem in details in the bug. In essence, it all converges
to the fact that /dev/nbdX or /dev/loopX is being set as a root_device_name,
when LXC is being started. Later, while attaching a new volume, these devices
names are not being properly parsed. Nor can a disk_bus can be chosen for the 
new
volume.

Saving the nbd device as root_device_name was introduced by patch
6277f8aa9 - Change-Id: I063fd3a9856bba089bcde5cdefd2576e2eb2b0e9,
to fix a problem where nbd and loop devices are not properly disconnected while 
the LXC instance
 has been terminated.
These devices where leaking because, while starting LXC, we are unmounting the 
lxc rootfs,
and thus cleaning the LXC space in disk.clean_lxc_namespace() - 
https://github.com/openstack/nova/blob/master/nova/virt/libvirt/driver.py#L3570
This is causing the disk api not able to find a relevant nbd/loop device to 
disconnect
while terminating a LXC instance.
https://github.com/openstack/nova/blob/master/nova/virt/disk/api.py#L250

The possible to solutions to these problems, I could come up with:
1. Stop saving nbd/loop devices as root_device_name, as well as, stop calling
   disk.clean_lxc_namespace(), letting the terminate_instance()
   unmount the LXC rootfs and disconnect relevant devices
   (relying on an existing mechanism). 
   This will also allow the attach_volume() to succeed.
   
2. Adjust get_next_device_name() method to explicitly handle nbd and loop 
devices in 
   https://github.com/openstack/nova/blob/master/nova/compute/utils.py#L129
   
3. Add an additional filed to the instance model, other then root_device_name,
   to save nbd/loop devices, that should be disconnected on instance 
termination.
   
Not sure which option is better. Also, it is not entirely clear to me why 
clean_lxc_namespace
was/is needed.

I'd like to get your opinion and feedback if I'm missing anything or the 
explanation was too confusing :)

Thanks,
Vladik 

_______________________________________________
OpenStack-dev mailing list
OpenStack-dev@lists.openstack.org
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to