commit af16c5e000926d42222c0d5651f19db522c59153 Author: Radek Pazdera rpazdera@redhat.com Date: Wed Aug 22 13:37:29 2012 +0200
NetTestController: Fix race in _prepare_device()
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 b39939e..1f86eba 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