[PATCH] NetTestController: Fix race in _prepare_device()

Radek Pazdera rpazdera at redhat.com
Wed Aug 22 11:37:29 UTC 2012


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 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"])
-- 
1.7.7.6



More information about the LNST-developers mailing list