Petr Horáček has uploaded a new change for review. Change subject: net: synchronous ifup ......................................................................
net: synchronous ifup Return device only after it's properly created and up. Change-Id: Id739556e9ebcdd2882d2b055762007204c61cef3 Signed-off-by: Petr Horáček <[email protected]> --- M vdsm/network/configurators/ifcfg.py 1 file changed, 48 insertions(+), 1 deletion(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/33/45533/1 diff --git a/vdsm/network/configurators/ifcfg.py b/vdsm/network/configurators/ifcfg.py index e1d3e94..cf1ef74 100644 --- a/vdsm/network/configurators/ifcfg.py +++ b/vdsm/network/configurators/ifcfg.py @@ -18,6 +18,7 @@ # from __future__ import absolute_import +from contextlib import contextmanager import copy import errno import glob @@ -40,6 +41,7 @@ from vdsm import sysctl from vdsm import utils from vdsm.netconfpersistence import RunningConfig, PersistentConfig +from vdsm.netlink import monitor if utils.isOvirtNode(): from ovirt.node.utils import fs as node_fs @@ -787,7 +789,20 @@ t.daemon = True t.start() else: - _exec_ifup(iface.name, cgroup) + if not iface.master: + if iface.ipv4: + expected_event = {'label': iface.name, 'family': 'inet', + 'scope': 'global'} + elif iface.ipv6: + expected_event = {'label': iface.name, 'family': 'inet6', + 'scope': 'global'} + else: + expected_event = {'label': iface.name, 'family': 'inet6', + 'scope': 'link'} + with _wait_for_event(iface, expected_event): + _exec_ifup(iface.name, cgroup) + else: + _exec_ifup(iface.name, cgroup) def _restore_default_bond_options(bond_name, desired_options): @@ -916,3 +931,35 @@ ifcfgs.add(ROUTE_PATH % top_level_device) return ifcfgs + + +def _netmask2prefix(netmask): + return sum([bin(int(x)).count('1') for x in netmask.split('.')]) + + +def _is_subdict(subdict, superdict): + return all(item in frozenset(superdict.items()) + for item in frozenset(subdict.items())) + + +@contextmanager +def _wait_for_event(iface, expected_event, timeout=10): + with monitor.Monitor(groups=('ipv4-ifaddr', 'ipv6-ifaddr'), + timeout=timeout) as mon: + try: + yield + finally: + caught_events = [] + try: + for event in mon: + caught_events.append(event) + if _is_subdict(expected_event, event): + mon.stop() + except monitor.MonitorError as e: + if e[0] == monitor.E_TIMEOUT: + logging.warning('Expected event "%s" of interface "%s" ' + 'was not caught within the given timeout. ' + 'Caught events: %s', expected_event, iface, + caught_events) + else: + raise -- To view, visit https://gerrit.ovirt.org/45533 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id739556e9ebcdd2882d2b055762007204c61cef3 Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Petr Horáček <[email protected]> _______________________________________________ vdsm-patches mailing list [email protected] https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches
