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

Reply via email to