summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--autopart.py5
-rw-r--r--bootloader.py11
-rw-r--r--dispatch.py4
-rw-r--r--fsset.py10
-rw-r--r--iw/partition_gui.py14
-rw-r--r--partitioning.py64
-rw-r--r--textw/partition_text.py15
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
diff --git a/fsset.py b/fsset.py
index 7cd278487..60d8e6abe 100644
--- a/fsset.py
+++ b/fsset.py
@@ -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()