
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. / Oskari