[PATCH] Deal with zFCP multipath devices in the filter UI (#618535)

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Handle zFCP multipath devices correctly in the filter UI.  When you add
the LUN the first time, whatever path you choose, the filter UI treats
it as a singlepath disk and it shows up in the Other SAN Devices list.
Once you add another path for the zFCP LUN, you get the multipath
device.  But the invalid singlepath entry is still there, even though we
don't want to see it.

Since our Add Advanced Storage dialog only allows us to add one LUN path
at a time for multipath storage, we need to account for instances where
a LUN path may initially show up as a singlepath storage device then
later show up as multipath storage.  In those cases, invalidate
_cachedDevices and remove the singlepath instance from the store used by
the UI.
---
 iw/filter_gui.py |   18 +++++++++++++++---
 1 files changed, 15 insertions(+), 3 deletions(-)

diff --git a/iw/filter_gui.py b/iw/filter_gui.py
index 4f05f31..d6dac34 100644
--- a/iw/filter_gui.py
+++ b/iw/filter_gui.py
@@ -464,14 +464,17 @@ class FilterWindow(InstallWindow):
         (new_raids, new_nonraids) = self.split_list(lambda d: isRAID(d) and not isCCISS(d),
                                                     new_singlepaths)
 
-        nonraids = filter(lambda d: d not in self._cachedDevices, new_nonraids)
-        raids = filter(lambda d: d not in self._cachedRaidDevices, new_raids)
-
         # The end result of the loop below is that mpaths is a list of lists of
         # components, just like new_mpaths.  That's what populate expects.
         mpaths = []
         for mp in new_mpaths:
             for d in mp:
+                # If any of the multipath components are in the nonraids cache,
+                # invalidate that cache and remove it from the UI store.
+                if d in self._cachedDevices:
+                    self.depopulate(d)
+                    del(self._cachedDevices[:])
+
                 # If all components of this multipath device are in the
                 # cache, skip it.  Otherwise, it's a new device and needs to
                 # be populated into the UI.
@@ -479,6 +482,9 @@ class FilterWindow(InstallWindow):
                     mpaths.append(mp)
                     break
 
+        nonraids = filter(lambda d: d not in self._cachedDevices, new_nonraids)
+        raids = filter(lambda d: d not in self._cachedRaidDevices, new_raids)
+
         self.populate(nonraids, mpaths, raids, activeByDefault=True)
 
         # Make sure to update the size label at the bottom.
@@ -671,6 +677,12 @@ class FilterWindow(InstallWindow):
 
         return self.vbox
 
+    def depopulate(self, component):
+        for row in self.store:
+            if row[4] == component['DEVNAME']:
+                self.store.remove(row.iter)
+                return
+
     def populate(self, nonraids, mpaths, raids, activeByDefault=False):
         def _addTuple(tuple):
             global totalDevices, totalSize
-- 
1.7.1

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list


[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux