From a8c13fa4b1c43a383f5e880d057e22fc2ac5920e Mon Sep 17 00:00:00 2001 From: Matt Wilson Date: Wed, 20 Jun 2001 05:05:43 +0000 Subject: get final branch copies --- partitioning.py | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 53 insertions(+), 2 deletions(-) (limited to 'partitioning.py') diff --git a/partitioning.py b/partitioning.py index 57809719f..6bad67c24 100644 --- a/partitioning.py +++ b/partitioning.py @@ -109,7 +109,7 @@ def get_primary_partitions(disk): return rc - +# returns a list of partitions which can make up RAID devices def get_raid_partitions(disk): rc = [] part = disk.next_partition() @@ -124,7 +124,54 @@ def get_raid_partitions(disk): part = disk.next_partition(part) return rc - + + +# returns a list of the actual raid device requests +def get_raid_devices(requests): + raidRequests = [] + for request in requests: + if request.type == REQUEST_RAID: + raidRequests.append(request) + + return raidRequests + + +# returns a list of raid partitions which haven't been used in a device yet +def get_available_raid_partitions(diskset, requests): + rc = [] + drives = diskset.disks.keys() + raiddevs = get_raid_devices(requests) + drives.sort() + for drive in drives: + disk = diskset.disks[drive] + for part in get_raid_partitions(disk): + for raid in raiddevs: + if raid.raidmembers and part in raid.raidmembers: + break + rc.append(part) + return rc + +# return minimum numer of raid members required for a raid level +def get_raid_min_members(raidlevel): + if raidlevel == "RAID-0": + return 2 + elif raidlevel == "RAID-1": + return 2 + elif raidlevel == "RAID-5": + 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 raidlevel == "RAID-0": + return 0 + elif raidlevel == "RAID-1": + return 0 + elif raidlevel == "RAID-5": + return max(0, nummembers - get_raid_min_members(raidlevel)) + else: + raise ValueError, "invalid raidlevel in get_raid_max_spares" # returns error string if something not right about request # returns error string if something not right about request @@ -271,6 +318,10 @@ class PartitionRequests: if diskset: self.setFromDisk(diskset) + # identifier used for raid partitions + self.maxcontainer = 0 + + def setFromDisk(self, diskset): self.deletes = [] diskset.refreshDevices() -- cgit