This commit fixes possible race condition in _prepare_device() that can occur when dynamically attaching interfaces to a libvirt domain.
In case the interface already exists the call of wait_for can return prematurely and then the following device check will not fail.
Signed-off-by: Radek Pazdera rpazdera@redhat.com --- NetTest/NetTestController.py | 14 ++++++++++++-- 1 files changed, 12 insertions(+), 2 deletions(-)
diff --git a/NetTest/NetTestController.py b/NetTest/NetTestController.py index c70e252..c0ebb96 100644 --- a/NetTest/NetTestController.py +++ b/NetTest/NetTestController.py @@ -106,8 +106,18 @@ class NetTestController: "Machine '%d' is not virtual." % (machine_id) raise NetTestError(msg)
- if not "hwaddr" in dev: - dev["hwaddr"] = self._mac_pool.get_addr() + if "hwaddr" in dev: + query_result = rpc.get_devices_by_hwaddr(dev["hwaddr"]) + if query_result: + msg = "Device with hwaddr %s already exists" \ + % dev["hwaddr"] + raise NetTestError(msg) + else: + while True: + dev["hwaddr"] = self._mac_pool.get_addr() + query_result = rpc.get_devices_by_hwaddr(dev["hwaddr"]) + if not len(query_result): + break
if "target_bridge" in dev: brctl = BridgeCtl(dev["target_bridge"])
lnst-developers@lists.fedorahosted.org