Petr Horáček has uploaded a new change for review. Change subject: vdsm-restore-net-config: wait for links with netlink monitor ......................................................................
vdsm-restore-net-config: wait for links with netlink monitor Change-Id: I1c45430925a55bb54995b91a061bc15affe15763 Signed-off-by: Petr Horáček <phora...@redhat.com> --- M vdsm/vdsm-restore-net-config 1 file changed, 22 insertions(+), 18 deletions(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/68/53968/1 diff --git a/vdsm/vdsm-restore-net-config b/vdsm/vdsm-restore-net-config index a64f7ce..3515f9a 100755 --- a/vdsm/vdsm-restore-net-config +++ b/vdsm/vdsm-restore-net-config @@ -25,7 +25,6 @@ import os import re import threading -import time import errno import six @@ -35,12 +34,12 @@ from vdsm.netinfo import nics, misc from vdsm.netinfo.misc import ipv6_supported from vdsm.netinfo.cache import CachingNetInfo +from vdsm.netlink import monitor from vdsm import kernelconfig from vdsm.constants import P_VDSM_RUN from vdsm.netconfpersistence import RunningConfig, PersistentConfig, \ CONF_PERSIST_DIR, BaseConfig from vdsm import sysctl -from vdsm.utils import monotonic_time import hostdev # Ifcfg persistence restoration @@ -49,8 +48,6 @@ # Unified persistence restoration from vdsm.network.api import setupNetworks, change_numvfs - -_ALL_DEVICES_UP_TIMEOUT = 5 _NETS_RESTORED_MARK = os.path.join(P_VDSM_RUN, 'nets_restored') _VIRTUAL_FUNCTIONS_PATH = os.path.join(CONF_PERSIST_DIR, 'virtual_functions') @@ -324,20 +321,27 @@ def _wait_for_for_all_devices_up(links): - timeout = monotonic_time() + _ALL_DEVICES_UP_TIMEOUT - down_links = _get_links_with_state_down(links) - - # TODO: use netlink monitor here might be more elegant (not available in - # TODO: 3.5) - while down_links and monotonic_time() < timeout: - logging.debug("waiting for %s to be up.", down_links) - time.sleep(1) - down_links = _get_links_with_state_down(links) - - if down_links: - logging.warning("Not all devices are up. VDSM might restore them " - "although they were not changed since they were " - "persisted.") + try: + with monitor.Monitor(groups=('link',), timeout=5) as mon: + down_links = _get_links_with_state_down(links) + logging.debug("waiting for %s to be up.", down_links) + if not down_links: + mon.stop() + for event in mon: + link_name = event.get('label') + if (link_name in down_links and + event.get('event') == 'new_link' and + event.get('state') == 'up'): + down_links.remove(link_name) + if not down_links: + mon.stop() + except monitor.MonitorError as e: + if e[0] == monitor.E_TIMEOUT: + logging.warning("Not all devices are up. VDSM might restore them " + "although they were not changed since they were " + "persisted.") + else: + raise else: logging.debug("All devices are up.") -- To view, visit https://gerrit.ovirt.org/53968 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I1c45430925a55bb54995b91a061bc15affe15763 Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Petr Horáček <phora...@redhat.com> _______________________________________________ vdsm-patches mailing list vdsm-patches@lists.fedorahosted.org https://lists.fedorahosted.org/mailman/listinfo/vdsm-patches