[lnst] NetTestController: Fix race in _prepare_device()
Jiří Pírko
jirka at fedoraproject.org
Wed Aug 22 14:28:14 UTC 2012
commit af16c5e000926d42222c0d5651f19db522c59153
Author: Radek Pazdera <rpazdera at 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 at 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"])
More information about the LNST-developers
mailing list