FAQ Search Today's Posts Mark Forums Read
» Video Reviews

» Linux Archive

Linux-archive is a website aiming to archive linux email lists and to make them easily accessible for linux users/developers.


» Sponsor

» Partners

» Sponsor

Go Back   Linux Archive > CentOS > CentOS

 
 
LinkBack Thread Tools
 
Old 12-10-2009, 02:59 PM
Hans de Goede
 
Default Rework udev_settle timeout handling (#544177)

1) centralize the setting of the timeout parameter inside the
udev_settle function. I do realize that the time needed for
initially scanning all disks is much larger, then the time for
scanning a single new partition when we are creating partitions.
But since this is a timeout, and udevadm settle will exit as soon
as the scanning is done, I see no reason not to have a single place
to configure the timeout assuming the worst case scenario (the initial
disk scan). This way we won't have these magic values sprinkled all
over the code.

2) Given that in the past we've had bugs filed
about anaconda taking many minutes to scan hardware on big iron machine
and that our initial udev settle call will scan all disks, I think
that udevadm's default timeout of 1 minutes is too low, so this patch
sets the timeout to 5 minutes.
---
baseudev.py | 11 ++++++-----
storage/devices.py | 18 +++++++++---------
storage/devicetree.py | 2 +-
storage/udev.py | 2 +-
4 files changed, 17 insertions(+), 16 deletions(-)

diff --git a/baseudev.py b/baseudev.py
index d88d7fc..bda4fd6 100644
--- a/baseudev.py
+++ b/baseudev.py
@@ -61,7 +61,7 @@ def udev_get_device(sysfs_path):
return dev

def udev_get_devices(deviceClass="block"):
- udev_settle(timeout=30)
+ udev_settle()
entries = []
for path in udev_enumerate_devices(deviceClass):
entry = udev_get_device(path)
@@ -84,10 +84,11 @@ def udev_parse_uevent_file(dev):

return dev

-def udev_settle(timeout=None):
- argv = ["settle"]
- if timeout:
- argv.append("--timeout=%d" % int(timeout))
+def udev_settle():
+ # wait maximal 300 seconds for udev to be done running blkid, lvm,
+ # mdadm etc. This large timeout is needed when running on machines with
+ # lots of disks, or with slow disks
+ argv = ["settle", "--timeout=300"]

iutil.execWithRedirect("udevadm", argv, stderr="/dev/null", searchPath=1)

diff --git a/storage/devices.py b/storage/devices.py
index 8db4d7c..22a4735 100644
--- a/storage/devices.py
+++ b/storage/devices.py
@@ -593,7 +593,7 @@ class StorageDevice(Device):

if self.status and self.format.exists:
self.format.teardown()
- udev_settle(timeout=10)
+ udev_settle()

if recursive:
self.teardownParents(recursive=recursive)
@@ -1518,11 +1518,11 @@ class LUKSDevice(DMCryptDevice):

if self.status and self.format.exists:
self.format.teardown()
- udev_settle(timeout=10)
+ udev_settle()

if self.slave.format.exists:
self.slave.format.teardown()
- udev_settle(timeout=10)
+ udev_settle()

if recursive:
self.teardownParents(recursive=recursive)
@@ -1530,7 +1530,7 @@ class LUKSDevice(DMCryptDevice):
def destroy(self):
log_method_call(self, self.name, status=self.status)
self.format.teardown()
- udev_settle(timeout=10)
+ udev_settle()
self.teardown()

@property
@@ -2133,7 +2133,7 @@ class LVMLogicalVolumeDevice(DMDevice):

if self.status and self.format.exists:
self.format.teardown()
- udev_settle(timeout=10)
+ udev_settle()

if self.status:
lvm.lvdeactivate(self.vg.name, self._name)
@@ -2199,7 +2199,7 @@ class LVMLogicalVolumeDevice(DMDevice):
if self.format.exists:
self.format.teardown()

- udev_settle(timeout=10)
+ udev_settle()
lvm.lvresize(self.vg.name, self._name, self.size)


@@ -2456,11 +2456,11 @@ class MDRaidArrayDevice(StorageDevice):
device.addChild()

device.setup()
- udev_settle(timeout=10)
+ udev_settle()
try:
mdraid.mdadd(device.path, len(self.devices) < self.memberDevices)
# mdadd causes udev events
- udev_settle(timeout=10)
+ udev_settle()
except MDRaidError as e:
log.warning("failed to add member %s to md array %s: %s"
% (device.path, self.path, e))
@@ -2567,7 +2567,7 @@ class MDRaidArrayDevice(StorageDevice):

if self.status and self.format.exists:
self.format.teardown()
- udev_settle(timeout=10)
+ udev_settle()

# Since BIOS RAID sets (containers in mdraid terminology) never change
# there is no need to stop them and later restart them. Not stopping
diff --git a/storage/devicetree.py b/storage/devicetree.py
index e4c1025..07aa6d6 100644
--- a/storage/devicetree.py
+++ b/storage/devicetree.py
@@ -734,7 +734,7 @@ class DeviceTree(object):
self.teardownAll()
action.execute(intf=self.intf)

- udev_settle(timeout=10)
+ udev_settle()
for device in self._devices:
# make sure we catch any renumbering parted does
if device.exists and isinstance(device, PartitionDevice):
diff --git a/storage/udev.py b/storage/udev.py
index 5d4c778..3743c9f 100644
--- a/storage/udev.py
+++ b/storage/udev.py
@@ -77,7 +77,7 @@ def udev_resolve_glob(glob):
return ret

def udev_get_block_devices():
- udev_settle(timeout=30)
+ udev_settle()
entries = []
for path in udev_enumerate_block_devices():
entry = udev_get_block_device(path)
--
1.6.5.2

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@redhat.com
https://www.redhat.com/mailman/listinfo/anaconda-devel-list
 
Old 12-10-2009, 05:12 PM
David Lehman
 
Default Rework udev_settle timeout handling (#544177)

Looks fine to me. I think 300 seconds might be overkill but, like you
said, it's a timeout. It's in our best interest to avoid ever hitting
it.

For the record, my guess is that the "several minutes" reports include
populating the entire device tree, which adds a significant amount to
the workload beyond populating the udev db. The only instance I saw, it
turned out that estimate included something like two minutes waiting for
input at the LUKS passphrase prompt.

Still... I can live with "better safe than sorry".

Dave

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

Thread Tools




All times are GMT. The time now is 12:17 AM.

VBulletin, Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.
Content Relevant URLs by vBSEO ©2007, Crawlability, Inc.
Copyright 2007 - 2008, www.linux-archive.org