Edward Haas has uploaded a new change for review. Change subject: net: Bond - preserve original slaves link state. ......................................................................
net: Bond - preserve original slaves link state. Before attaching or removing a slave from a bond, its state is set to DOWN. This patch makes sure to preserve its original state, even when failure occurs. (Without it, the link may be set to DOWN, even if the slave has not been added to the bond) Change-Id: Ia98d01512322f88bf9819532afb2ea337cee7749 Signed-off-by: Edward Haas <edwa...@redhat.com> --- M lib/vdsm/network/link/bond.py 1 file changed, 19 insertions(+), 6 deletions(-) git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/46/63446/1 diff --git a/lib/vdsm/network/link/bond.py b/lib/vdsm/network/link/bond.py index d45e139..9911ad9 100644 --- a/lib/vdsm/network/link/bond.py +++ b/lib/vdsm/network/link/bond.py @@ -19,6 +19,7 @@ from __future__ import absolute_import import abc +from contextlib import contextmanager import logging import os import six @@ -149,18 +150,20 @@ def add_slaves(self, slaves): for slave in slaves: - iface.down(slave) - with open(self.BONDING_SLAVES % self._master, 'w') as f: - f.write('+%s' % slave) + with _preserve_iface_state(slave): + iface.down(slave) + with open(self.BONDING_SLAVES % self._master, 'w') as f: + f.write('+%s' % slave) logging.info('Slave {} has been added to bond {}.'.format( slave, self._master)) self._slaves.add(slave) def del_slaves(self, slaves): for slave in slaves: - iface.down(slave) - with open(self.BONDING_SLAVES % self._master, 'w') as f: - f.write('-%s' % slave) + with _preserve_iface_state(slave): + iface.down(slave) + with open(self.BONDING_SLAVES % self._master, 'w') as f: + f.write('-%s' % slave) logging.info('Slave {} has been removed from bond {}.'.format( slave, self._master)) self._slaves.remove(slave) @@ -206,6 +209,16 @@ # a reasonable scenario and leave it to upper levels to handle it. +@contextmanager +def _preserve_iface_state(dev): + dev_was_up = iface.is_up(dev) + try: + yield + finally: + if dev_was_up and not iface.is_up(dev): + iface.up(dev) + + # TODO: Use a configuration parameter to determine which driver to use. def _bond_driver(): """ -- To view, visit https://gerrit.ovirt.org/63446 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia98d01512322f88bf9819532afb2ea337cee7749 Gerrit-PatchSet: 1 Gerrit-Project: vdsm Gerrit-Branch: master Gerrit-Owner: Edward Haas <edwa...@redhat.com> _______________________________________________ vdsm-patches mailing list vdsm-patches@lists.fedorahosted.org https://lists.fedorahosted.org/admin/lists/vdsm-patches@lists.fedorahosted.org