summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeremy Katz <katzj@redhat.com>2002-02-07 20:25:30 +0000
committerJeremy Katz <katzj@redhat.com>2002-02-07 20:25:30 +0000
commit5bd2c24d83025448000e8b56f8db8002013a9501 (patch)
treea351ea54a5de9870d80de869b5d693b5675ed5c5
parentc7f2ba54e0956c597f48ce564764b9dcdb487d7d (diff)
downloadanaconda-5bd2c24d83025448000e8b56f8db8002013a9501.tar.gz
anaconda-5bd2c24d83025448000e8b56f8db8002013a9501.tar.xz
anaconda-5bd2c24d83025448000e8b56f8db8002013a9501.zip
stage2 of the partitioning.py cleanup
* move the following functions from partitioning.py -> raid.py isRaid5, isRaid1, isRaid0, get_raid_min_members, get_raid_max_spares * update other sources accordingly
-rw-r--r--iw/partition_gui.py23
-rw-r--r--kickstart.py7
-rw-r--r--partitioning.py75
-rw-r--r--raid.py63
4 files changed, 92 insertions, 76 deletions
diff --git a/iw/partition_gui.py b/iw/partition_gui.py
index dcf37b838..871d4f600 100644
--- a/iw/partition_gui.py
+++ b/iw/partition_gui.py
@@ -25,6 +25,7 @@ import string
import copy
import types
import checklist
+import raid
from iw_gui import *
from translate import _, N_
from partitioning import *
@@ -661,7 +662,7 @@ def createFSTypeMenu(fstype, fstypechangeCB, mountCombo,
def raidlevelchangeCB(widget, sparesb):
raidlevel = widget.get_data("level")
numparts = sparesb.get_data("numparts")
- maxspares = get_raid_max_spares(raidlevel, numparts)
+ maxspares = raid.get_raid_max_spares(raidlevel, numparts)
if maxspares > 0 and raidlevel != "RAID0":
sparesb.set_sensitive(1)
adj = sparesb.get_adjustment()
@@ -821,9 +822,9 @@ class PartitionWindow(InstallWindow):
# XXX this breaks when we try to refresh tree after a refresh
#
# XXX - this breaks self.refresh calls!!!
- lvmparent = self.tree.append(None)
- self.tree[lvmparent]['Device'] = _("LVM Physical Volumes")
-# lvmparent = None
+# lvmparent = self.tree.append(None)
+# self.tree[lvmparent]['Device'] = _("LVM Physical Volumes")
+ lvmparent = None
for vgname in lvmrequests.keys():
vgparent = self.tree.append(lvmparent)
self.tree[vgparent]['Device'] = _("LVM: %s") % (vgname,)
@@ -858,9 +859,9 @@ class PartitionWindow(InstallWindow):
raidrequests = self.partitions.getRaidRequests()
if raidrequests:
# XXX - this breaks self.refresh calls!!!
- raidparent = self.tree.append(None)
- self.tree[raidparent]['Device'] = _("RAID Devices")
-# raidparent = None
+# raidparent = self.tree.append(None)
+# self.tree[raidparent]['Device'] = _("RAID Devices")
+ raidparent = None
for request in raidrequests:
iter = self.tree.append(raidparent)
@@ -890,9 +891,9 @@ class PartitionWindow(InstallWindow):
# now normal partitions
# XXX - this breaks self.refresh calls!!!
- drvparent = self.tree.append(None)
- self.tree[drvparent]['Device'] = _("Hard Drives")
-# drvparent=None
+# drvparent = self.tree.append(None)
+# self.tree[drvparent]['Device'] = _("Hard Drives")
+ drvparent=None
for drive in drives:
disk = self.diskset.disks[drive]
@@ -1650,7 +1651,7 @@ class PartitionWindow(InstallWindow):
nspares = 0
if raidrequest.raidlevel:
- maxspares = get_raid_max_spares(raidrequest.raidlevel, numparts)
+ maxspares = raid.get_raid_max_spares(raidrequest.raidlevel, numparts)
else:
maxspares = 0
diff --git a/kickstart.py b/kickstart.py
index 24de479f0..c18b3fd3a 100644
--- a/kickstart.py
+++ b/kickstart.py
@@ -7,6 +7,7 @@ from autopart import *
from fsset import *
from flags import flags
import sys
+import raid
import string
class Script:
@@ -647,11 +648,11 @@ class KickstartBase(BaseInstallClass):
raidmems.append(self.ksRaidMapping[member])
# XXX this shouldn't have to happen =\
- if isRaid0(level):
+ if raid.isRaid0(level):
level = "RAID0"
- elif isRaid1(level):
+ elif raid.isRaid1(level):
level = "RAID1"
- elif isRaid5(level):
+ elif raid.isRaid5(level):
level = "RAID5"
if not level:
diff --git a/partitioning.py b/partitioning.py
index d502e361a..2b50ed155 100644
--- a/partitioning.py
+++ b/partitioning.py
@@ -30,6 +30,7 @@ import sys
import string
import iutil
import partedUtils
+import raid
from translate import _
from log import log
from constants import *
@@ -125,9 +126,9 @@ def get_available_raid_partitions(diskset, requests, request):
break
if not used:
- rc.append((partname, getPartSizeMB(part), 0))
+ rc.append((partname, partedUtils.getPartSizeMB(part), 0))
elif used == 2:
- rc.append((partname, getPartSizeMB(part), 1))
+ rc.append((partname, partedUtils.getPartSizeMB(part), 1))
return rc
# returns a list of tuples of lvm partitions which can be used or are used
@@ -155,9 +156,9 @@ def get_available_lvm_partitions(diskset, requests, request):
break
if used == 0:
- rc.append((partname, getPartSizeMB(part), 0))
+ rc.append((partname, partedUtils.getPartSizeMB(part), 0))
elif used == 2:
- rc.append((partname, getPartSizeMB(part), 1))
+ rc.append((partname, partedUtils.getPartSizeMB(part), 1))
return rc
def get_lvm_volume_group_size(request, requests, diskset):
@@ -173,54 +174,6 @@ def get_lvm_volume_group_size(request, requests, diskset):
return totalspace
-# set of functions to determine if the given level is RAIDX or X
-def isRaid5(raidlevel):
- if raidlevel == "RAID5":
- return 1
- elif raidlevel == 5:
- return 1
- elif raidlevel == "5":
- return 1
- return 0
-
-def isRaid1(raidlevel):
- if raidlevel == "RAID1":
- return 1
- elif raidlevel == 1:
- return 1
- elif raidlevel == "1":
- return 1
- return 0
-
-def isRaid0(raidlevel):
- if raidlevel == "RAID0":
- return 1
- elif raidlevel == 0:
- return 1
- elif raidlevel == "0":
- return 1
- return 0
-
-
-# return minimum numer of raid members required for a raid level
-def get_raid_min_members(raidlevel):
- if isRaid0(raidlevel):
- return 2
- elif isRaid1(raidlevel):
- return 2
- elif isRaid5(raidlevel):
- return 3
- else:
- raise ValueError, "invalid raidlevel in get_raid_min_members"
-
-# return max num of spares available for raidlevel and total num of members
-def get_raid_max_spares(raidlevel, nummembers):
- if isRaid0(raidlevel):
- return 0
- elif isRaid1(raidlevel) or isRaid5(raidlevel):
- return max(0, nummembers - get_raid_min_members(raidlevel))
- else:
- raise ValueError, "invalid raidlevel in get_raid_max_spares"
def get_raid_device_size(raidrequest, partitions, diskset):
if not raidrequest.raidmembers or not raidrequest.raidlevel:
@@ -236,7 +189,7 @@ def get_raid_device_size(raidrequest, partitions, diskset):
part = partedUtils.get_partition_by_name(diskset.disks, device)
partsize = part.geom.length * part.geom.disk.dev.sector_size
- if isRaid0(raidlevel):
+ if raid.isRaid0(raidlevel):
sum = sum + partsize
else:
if not smallest:
@@ -244,11 +197,11 @@ def get_raid_device_size(raidrequest, partitions, diskset):
elif partsize < smallest:
smallest = partsize
- if isRaid0(raidlevel):
+ if raid.isRaid0(raidlevel):
return sum
- elif isRaid1(raidlevel):
+ elif raid.isRaid1(raidlevel):
return smallest
- elif isRaid5(raidlevel):
+ elif raid.isRaid5(raidlevel):
return (nummembers-1) * smallest
else:
raise ValueError, "Invalid raidlevel in get_raid_device_size()"
@@ -503,10 +456,10 @@ def sanityCheckRaidRequest(reqpartitions, newraid, doPartitionCheck = 1):
if not bootreq and newraid.mountpoint:
# XXX 390 can't have boot on raid
if ((newraid.mountpoint == "/boot" or newraid.mountpoint == "/")
- and not isRaid1(newraid.raidlevel)):
+ and not raid.isRaid1(newraid.raidlevel)):
return _("Bootable partitions can only be on RAID1 devices.")
- minmembers = get_raid_min_members(newraid.raidlevel)
+ minmembers = raid.get_raid_min_members(newraid.raidlevel)
if len(newraid.raidmembers) < minmembers:
return _("A RAID device of type %s "
"requires at least %s members.") % (newraid.raidlevel,
@@ -599,7 +552,7 @@ def sanityCheckAllRequests(requests, diskset, baseChecks = 0):
bootreq = requests.getBootableRequest()
# XXX 390 can't have boot on RAID
if (bootreq and (bootreq.type == REQUEST_RAID) and
- (not isRaid1(bootreq.raidlevel))):
+ (not raid.isRaid1(bootreq.raidlevel))):
errors.append(_("Bootable partitions can only be on RAID1 devices."))
# can't have bootable partition on LV
@@ -664,7 +617,7 @@ def deleteAllLogicalPartitions(part, requests):
request = requests.getRequestByDeviceName(partedUtils.get_partition_name(partition))
requests.removeRequest(request)
if request.type == REQUEST_PREEXIST:
- drive = get_partition_drive(partition)
+ drive = partedUtils.get_partition_drive(partition)
delete = DeleteSpec(drive, partition.geom.start, partition.geom.end)
requests.addDelete(delete)
@@ -1879,7 +1832,7 @@ def doDeletePartitionByRequest(intf, requestlist, partition):
return 0
if iutil.getArch() == "s390" and type(partition) != type("RAID"):
- self.intf.messageWindow(_("Error"),
+ intf.messageWindow(_("Error"),
_("DASD partitions can only be deleted "
"with fdasd"))
return
diff --git a/raid.py b/raid.py
index 949cff3cc..aa2a4c1c4 100644
--- a/raid.py
+++ b/raid.py
@@ -4,7 +4,7 @@
#
# Erik Troan <ewt@redhat.com>
#
-# Copyright 2001 Red Hat, Inc.
+# Copyright 2001-2002 Red Hat, Inc.
#
# This software may be freely redistributed under the terms of the GNU
# library public license.
@@ -13,6 +13,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
#
+"""Raid probing control."""
import parted
import isys
@@ -22,6 +23,12 @@ import partedUtils
from log import log
def scanForRaid(drives):
+ """Scans for raid devices on drives.
+
+ drives is a list of device names.
+ Returns a list of (mdMinor, devices, level, totalDisks) tuples.
+ """
+
raidSets = {}
raidDevices = {}
@@ -88,6 +95,7 @@ def scanForRaid(drives):
return raidList
def startAllRaid(driveList):
+ """Do a raid start on raid devices and return a list like scanForRaid."""
rc = []
mdList = scanForRaid(driveList)
for mdDevice, deviceList, level, numActive in mdList:
@@ -97,5 +105,58 @@ def startAllRaid(driveList):
return rc
def stopAllRaid(mdList):
+ """Do a raid stop on each of the raid device tuples given."""
for dev, devices, level, numActive in mdList:
isys.raidstop(dev)
+
+
+def isRaid5(raidlevel):
+ """Return whether raidlevel is a valid descriptor of RAID5."""
+ if raidlevel == "RAID5":
+ return 1
+ elif raidlevel == 5:
+ return 1
+ elif raidlevel == "5":
+ return 1
+ return 0
+
+def isRaid1(raidlevel):
+ """Return whether raidlevel is a valid descriptor of RAID1."""
+ if raidlevel == "RAID1":
+ return 1
+ elif raidlevel == 1:
+ return 1
+ elif raidlevel == "1":
+ return 1
+ return 0
+
+def isRaid0(raidlevel):
+ """Return whether raidlevel is a valid descriptor of RAID0."""
+ if raidlevel == "RAID0":
+ return 1
+ elif raidlevel == 0:
+ return 1
+ elif raidlevel == "0":
+ return 1
+ return 0
+
+def get_raid_min_members(raidlevel):
+ """Return the minimum number of raid members required for raid level"""
+ if isRaid0(raidlevel):
+ return 2
+ elif isRaid1(raidlevel):
+ return 2
+ elif isRaid5(raidlevel):
+ return 3
+ else:
+ raise ValueError, "invalid raidlevel in get_raid_min_members"
+
+def get_raid_max_spares(raidlevel, nummembers):
+ """Return the maximum number of raid spares for raidlevel."""
+ if isRaid0(raidlevel):
+ return 0
+ elif isRaid1(raidlevel) or isRaid5(raidlevel):
+ return max(0, nummembers - get_raid_min_members(raidlevel))
+ else:
+ raise ValueError, "invalid raidlevel in get_raid_max_spares"
+