Petersson, Mats
2007-May-14 13:18 UTC
[Xen-devel] XenDomainInfo.py: Can hang in _releaseDevices.
A section of code does: while True: t = xstransact("%s/device" % self.dompath) for devclass in XendDevices.valid_devices(): for dev in t.list(devclass): try: t.remove(dev) except: # Log and swallow any exceptions in removal -- # there''s nothing more we can do. log.exception( "Device release failed: %s; %s; %s", self.info[''name_label''], devclass, dev) if t.commit(): break If commit() doesn''t work because (for example) the device has already been removed or not correctly created, it will hang xend forever. [I managed to create such a case when adding some extra case to remove some other stuff]. Wouldn''t it be a good idea to make a "best attempt" of doing this, say, 10 or 100 times, then give up? -- Mats _______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel
Petersson, Mats
2007-May-14 13:52 UTC
RE: [Xen-devel] XenDomainInfo.py: Can hang in _releaseDevices.
Attached patch fixes the problem I described a while back where some "stuff" gets left in xenstore when a domain is destroyed, and also fixes the below described hang case by trying 100 times before it gives up. This may not be the right way to fix this, so I''m happy to fix/update as necessary. [This is also my first "python patch" where code is added, so excuse me if there''s something wrong there...] Signed off by: mats.petersson@amd.com -- Mats> -----Original Message----- > From: xen-devel-bounces@lists.xensource.com > [mailto:xen-devel-bounces@lists.xensource.com] On Behalf Of > Petersson, Mats > Sent: 14 May 2007 14:18 > To: xen devel > Subject: [Xen-devel] XenDomainInfo.py: Can hang in _releaseDevices. > > A section of code does: > > while True: > t = xstransact("%s/device" % self.dompath) > for devclass in XendDevices.valid_devices(): > for dev in t.list(devclass): > try: > t.remove(dev) > except: > # Log and swallow any exceptions in removal -- > # there''s nothing more we can do. > log.exception( > "Device release failed: %s; %s; %s", > self.info[''name_label''], devclass, dev) > if t.commit(): > break > > If commit() doesn''t work because (for example) the device has already > been removed or not correctly created, it will hang xend forever. [I > managed to create such a case when adding some extra case to > remove some > other stuff]. > > Wouldn''t it be a good idea to make a "best attempt" of doing > this, say, > 10 or 100 times, then give up? > > -- > Mats > > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xensource.com > http://lists.xensource.com/xen-devel > > >_______________________________________________ Xen-devel mailing list Xen-devel@lists.xensource.com http://lists.xensource.com/xen-devel