diff options
-rw-r--r-- | autopart.py | 5 | ||||
-rw-r--r-- | bootloader.py | 11 | ||||
-rw-r--r-- | dispatch.py | 4 | ||||
-rw-r--r-- | fsset.py | 10 | ||||
-rw-r--r-- | iw/partition_gui.py | 14 | ||||
-rw-r--r-- | partitioning.py | 64 | ||||
-rw-r--r-- | textw/partition_text.py | 15 |
7 files changed, 68 insertions, 55 deletions
diff --git a/autopart.py b/autopart.py index 91c5c1d3f..90984f584 100644 --- a/autopart.py +++ b/autopart.py @@ -628,11 +628,10 @@ def processPartitioning(diskset, requests, newParts): for request in requests.requests: # set the unique identifier for raid devices if request.type == REQUEST_RAID and not request.device: - request.device = str(requests.nextUniqueID) - requests.nextUniqueID = requests.nextUniqueID + 1 + request.device = str(request.uniqueID) if request.type == REQUEST_RAID: - request.size = get_raid_device_size(request) / 1024 / 1024 + request.size = get_raid_device_size(request, requests, diskset) / 1024 / 1024 if not request.device: # return PARTITION_FAIL diff --git a/bootloader.py b/bootloader.py index cd396714c..9a76807e3 100644 --- a/bootloader.py +++ b/bootloader.py @@ -493,17 +493,6 @@ def availableBootDevices(diskSet, fsset): return devs -# XXX move me somewhere else and split the bootloader and fsset parts -# into different functions -def partitioningComplete(dispatch, bl, fsset, diskSet, partitions): - fsset.reset() - for request in partitions.requests: - # XXX improve sanity checking - if not request.fstype or (request.fstype.isMountable() and not request.mountpoint): - continue - entry = request.toEntry() - fsset.add (entry) - def bootloaderSetupChoices(dispatch, bl, fsset, diskSet): choices = fsset.bootloaderChoices(diskSet) if not choices: diff --git a/dispatch.py b/dispatch.py index 1681d6b02..8df5a7349 100644 --- a/dispatch.py +++ b/dispatch.py @@ -22,9 +22,9 @@ from packages import writeKSConfiguration, turnOnFilesystems from packages import queryUpgradeContinue from autopart import doAutoPartition from partitioning import partitionMethodSetup, partitionObjectsInitialize +from partitioning import partitioningComplete from floppy import makeBootdisk -from bootloader import partitioningComplete, writeBootloader -from bootloader import bootloaderSetupChoices +from bootloader import writeBootloader, bootloaderSetupChoices from flags import flags from upgrade import upgradeFindPackages, upgradeMountFilesystems from upgrade import upgradeSwapSuggestion, upgradeMigrateFind @@ -849,6 +849,7 @@ class RAIDDevice(Device): if minor == -1: raise RuntimeError, ("Unable to allocate minor number for " "raid device") + RAIDDevice.usedMajors[minor] = None self.device = "md" + str(minor) self.minor = minor @@ -875,13 +876,13 @@ class RAIDDevice(Device): i = 0 for device in self.members[:self.numDisks]: entry = entry + " device %s/%s\n" % (devPrefix, - device.getDevice()) + device) entry = entry + " raid-disk %d\n" % (i,) i = i + 1 i = 0 for device in self.members[self.numDisks:]: entry = entry + " device %s/%s\n" % (devPrefix, - device.getDevice()) + device) entry = entry + " spare-disk %d\n" % (i,) i = i + 1 return entry @@ -896,7 +897,7 @@ class RAIDDevice(Device): f.write(self.raidTab('/tmp')) f.close() for device in self.members: - device.setupDevice(chroot, devPrefix=devPrefix) + PartitionDevice(device).setupDevice(chroot, devPrefix=devPrefix) iutil.execWithRedirect ("/usr/sbin/mkraid", ( 'mkraid', '--really-force', '--configfile', raidtab, node ), @@ -905,8 +906,7 @@ class RAIDDevice(Device): return node def solidify(self): - for device in self.members: - device.solidify() + return ext2 = fileSystemTypeGet("ext2") ext2.registerDeviceArgumentFunction(RAIDDevice, RAIDDevice.ext2Args) diff --git a/iw/partition_gui.py b/iw/partition_gui.py index f12864a6b..35878a13f 100644 --- a/iw/partition_gui.py +++ b/iw/partition_gui.py @@ -357,9 +357,8 @@ def createAllowedRaidPartitionsClist(allraidparts, reqraidpart): sw.set_policy(POLICY_NEVER, POLICY_AUTOMATIC) partrow = 0 - for (part, used) in allraidparts: - partname = "%s: %8.0f MB" % (get_partition_name(part), - getPartSizeMB(part)) + for (part, size, used) in allraidparts: + partname = "%s: %8.0f MB" % (part, size) partclist.append((partname,)) if used or not reqraidpart: @@ -584,8 +583,8 @@ class PartitionWindow(InstallWindow): text[self.titleSlot["Start"]] = "" text[self.titleSlot["End"]] = "" text[self.titleSlot["Size (MB)"]] = \ - "%g" % (get_raid_device_size(request) - / 1024.0 / 1024.0) + "%g" % (request.size) + # add a parent node to the tree parent = self.tree.insert_node (None, None, text, is_leaf = FALSE, @@ -1094,7 +1093,7 @@ class PartitionWindow(InstallWindow): row = 0 availraidparts = get_available_raid_partitions(self.diskset, - self.partitions.requests, + self.partitions, raidrequest) # Mount Point entry @@ -1204,7 +1203,8 @@ class PartitionWindow(InstallWindow): raidmembers = [] for i in raidclist.selection: - raidmembers.append(PartedPartitionDevice(availraidparts[i][0])) + id = self.partitions.getRequestByDeviceName(availraidparts[i][0]).uniqueID + raidmembers.append(id) request.raidmembers = raidmembers request.raidspares = sparesb.get_value_as_int() diff --git a/partitioning.py b/partitioning.py index 0eee45d69..c09783546 100644 --- a/partitioning.py +++ b/partitioning.py @@ -214,20 +214,21 @@ def get_raid_devices(requests): # returns a list of tuples of raid partitions which can be used or are used -# with whether they're used (0 if not, 1 if so) eg (part, used) +# with whether they're used (0 if not, 1 if so) eg (part, size, used) def get_available_raid_partitions(diskset, requests, request): rc = [] drives = diskset.disks.keys() - raiddevs = get_raid_devices(requests) + raiddevs = get_raid_devices(requests.requests) drives.sort() for drive in drives: disk = diskset.disks[drive] for part in get_raid_partitions(disk): + partname = get_partition_name(part) used = 0 for raid in raiddevs: if raid.raidmembers: for raidmem in raid.raidmembers: - if get_partition_name(part) == get_partition_name(raidmem.partition): + if partname == requests.getRequestByID(raidmem).device: if raid.device == request.device: used = 2 else: @@ -237,9 +238,9 @@ def get_available_raid_partitions(diskset, requests, request): break if not used: - rc.append((part, 0)) + rc.append((partname, getPartSizeMB(part), 0)) elif used == 2: - rc.append((part, 1)) + rc.append((partname, getPartSizeMB(part), 1)) return rc @@ -263,7 +264,7 @@ def get_raid_max_spares(raidlevel, nummembers): else: raise ValueError, "invalid raidlevel in get_raid_max_spares" -def get_raid_device_size(raidrequest): +def get_raid_device_size(raidrequest, partitions, diskset): if not raidrequest.raidmembers or not raidrequest.raidlevel: return 0 @@ -272,7 +273,9 @@ def get_raid_device_size(raidrequest): smallest = None sum = 0 for member in raidrequest.raidmembers: - part = member.partition + req = partitions.getRequestByID(member) + device = req.device + part = get_partition_by_name(diskset.disks, device) partsize = part.geom.length * part.geom.disk.dev.sector_size if raidlevel == "RAID0": @@ -428,11 +431,12 @@ def sanityCheckPartitionRequest(reqpartitions, newrequest): def sanityCheckRaidRequest(reqpartitions, newraid): if not newraid.raidmembers or not newraid.raidlevel: return _("No members in RAID request, or not RAID level specified.") - - for member in newraid.raidmembers: - part = member.partition - if part.get_flag(parted.PARTITION_RAID) != 1: - return _("Some members of RAID request are not RAID partitions.") + + # XXX fix this sanity case +## for member in newraid.raidmembers: +## part = member.partition +## if part.get_flag(parted.PARTITION_RAID) != 1: +## return _("Some members of RAID request are not RAID partitions.") rc = sanityCheckPartitionRequest(reqpartitions, newraid) if rc: @@ -544,7 +548,7 @@ class PartitionSpec: raidmem = [] if self.raidmembers: for i in self.raidmembers: - raidmem.append(get_partition_name(i.partition)) + raidmem.append(i) return "mountpoint: %s type: %s uniqueID:%s\n" %(self.mountpoint, fsname, self.uniqueID) +\ " size: %sM requestSize: %sM grow: %s max: %s\n" %(self.size, self.requestSize, self.grow, self.maxSize) +\ @@ -557,10 +561,13 @@ class PartitionSpec: " raidmembers: %s" % (raidmem) # turn a partition request into a fsset entry - def toEntry(self): + def toEntry(self, partitions): if self.type == REQUEST_RAID: + raidmems = [] + for member in self.raidmembers: + raidmems.append(partitions.getRequestByID(member).device) device = fsset.RAIDDevice(int(self.raidlevel[-1:]), - self.raidmembers, + raidmems, spares = self.raidspares) else: device = fsset.PartitionDevice(self.device) @@ -663,8 +670,10 @@ class Partitions: part = disk.next_partition(part) def addRequest (self, request): - request.uniqueID = self.nextUniqueID - self.nextUniqueID = self.nextUniqueID + 1 +# print "adding %s" %(self.nextUniqueID) + if not request.uniqueID: + request.uniqueID = self.nextUniqueID + self.nextUniqueID = self.nextUniqueID + 1 self.requests.append(request) self.requests.sort() @@ -687,6 +696,12 @@ class Partitions: return request return None + def getRequestByID(self, id): + for request in self.requests: + if request.uniqueID == id: + return request + return None + def getRaidRequests(self): retval = [] for request in self.requests: @@ -703,7 +718,7 @@ class Partitions: if not dev.raidmembers: continue for member in dev.raidmembers: - if request.device == get_partition_name(member.partition): + if request.device == self.getRequestByID(member).device: return 1 return 0 @@ -1046,7 +1061,7 @@ def getAutopartitionBoot(): def confirmDeleteRequest(intf, request): if request.device: if request.type == REQUEST_RAID: - errmsg = _("You are about to delete a RAID device.\n\nAre you sure?" % request.device) + errmsg = _("You are about to delete a RAID device.\n\nAre you sure?") else: errmsg = _("You are about to delete the /dev/%s partition.\n\nAre you sure?" % request.device) @@ -1119,7 +1134,6 @@ def doDeletePartitionByRequest(intf, requestlist, partition): def doEditPartitionByRequest(intf, requestlist, part): - if part == None: intf.messageWindow(_("Unable To Edit"), _("You must select a partition to edit")) @@ -1144,6 +1158,7 @@ def doEditPartitionByRequest(intf, requestlist, part): elif part.type & parted.PARTITION_EXTENDED: return (None, None) + request = requestlist.getRequestByDeviceName(get_partition_name(part)) if request: if request.type == REQUEST_PROTECTED: intf.messageWindow(_("Unable to Edit"), @@ -1161,3 +1176,12 @@ def doEditPartitionByRequest(intf, requestlist, part): raise ValueError, "Trying to edit non-existent partition %s" %(get_partition_name(part)) +def partitioningComplete(dispatch, bl, fsset, diskSet, partitions): + fsset.reset() + for request in partitions.requests: + # XXX improve sanity checking + if not request.fstype or (request.fstype.isMountable() and not request.mountpoint): + continue + entry = request.toEntry(partitions) + fsset.add (entry) + diff --git a/textw/partition_text.py b/textw/partition_text.py index a94737722..ca974c48e 100644 --- a/textw/partition_text.py +++ b/textw/partition_text.py @@ -124,7 +124,7 @@ class PartitionWindow: ptype = _("None") device = _("RAID Device %s" %(str(raidcounter))) - size = get_raid_device_size(request) / 1024.0 / 1024.0 + size = request.size self.lb.append(["%s" %(device), "", "", "%dM" %(size), "%s" %(ptype), "%s" %(mount)], request.device, @@ -372,14 +372,14 @@ class PartitionWindow: subgrid.setField(driveLbl, 0, 0) disks = self.diskset.disks.keys() drivelist = CheckboxTree(height=2, scroll=1) - avail = get_available_raid_partitions(self.diskset, self.partitions.requests, request) + avail = get_available_raid_partitions(self.diskset, self.partitions, request) # XXX if not request.raidmembers: - for (part, used) in avail: - drivelist.append(get_partition_name(part), part, 1) + for (part, size, used) in avail: + drivelist.append(part, part, 1) else: - for (part, used) in avail: - drivelist.append(get_partition_name(part), part, used) + for (part, size, used) in avail: + drivelist.append(part, part, used) subgrid.setField(drivelist, 0, 1) return (drivelist, subgrid) @@ -724,7 +724,8 @@ class PartitionWindow: raidmembers = [] for drive in drivelist.getSelection(): - raidmembers.append(PartedPartitionDevice(drive)) + id = self.partitions.getRequestByDeviceName(drive).uniqueID + raidmembers.append(id) request.raidmembers = raidmembers request.raidspares = int(spares.value()) request.raidlevel = raidtype.current() |