On Thu, Aug 29, 2013 at 02:46:43PM +0300, Oskari Saarenmaa wrote:
On Thu, Aug 29, 2013 at 11:28:43AM +0100, Daniel P. Berrange wrote:
> On Thu, Aug 29, 2013 at 01:00:15PM +0300, Oskari Saarenmaa wrote:
> > Replace the loop trying to find a free veth interface name for the container
> > by assigning the container if name to parent name + 'p' by default.
> > Interface name selection logic is susceptible to race conditions, so try to
> > select just one name by default and use that as a template for the second
> > name. The parent name can also be overriden in domain configuration.
>
> This doesn't do anything to solve the race condition AFAICT. You still
> have the window between finding a free name, and calling the ip command
> to allocate it.
That's true, but I think this change makes sense as a standalone change for
now; it makes sure libvirt uses the caller assigned names (if any) which
let's the caller work around this by selecting the name they like.
> What we need here is a change that will catch the failure from the ip
> command, and then go back to the start and find free names and retry
> the ip command.
I don't like this approach. It would require us to parse ip's stderr which
would be quite a bit of fragile code to handle a case that shouldn't ever
happen. We should just select a unique interface name in the first place, I
don't see any benefits in trying to force interface names to use low
integers in their names.
That is not fixing the race condition at all.
Daniel
--
|:
http://berrange.com -o-
http://www.flickr.com/photos/dberrange/ :|
|:
http://libvirt.org -o-
http://virt-manager.org :|
|:
http://autobuild.org -o-
http://search.cpan.org/~danberr/ :|
|:
http://entangle-photo.org -o-
http://live.gnome.org/gtk-vnc :|