All of lore.kernel.org
 help / color / mirror / Atom feed
From: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: Wei Liu <wei.liu2@citrix.com>,
	Boris Ostrovsky <boris.ostrovsky@oracle.com>,
	Ian Jackson <Ian.Jackson@eu.citrix.com>,
	Ian Campbell <Ian.Campbell@citrix.com>,
	Xen-devel <xen-devel@lists.xen.org>
Subject: Re: [PATCH for-4.5 RFC] pygrub: Fix regression from c/s d1b93ea, attempt 2
Date: Fri, 21 Nov 2014 12:09:33 -0500	[thread overview]
Message-ID: <20141121170933.GB8314@laptop.dumpdata.com> (raw)
In-Reply-To: <546F3EDD.3020006@citrix.com>

On Fri, Nov 21, 2014 at 01:32:13PM +0000, Andrew Cooper wrote:
> On 20/11/14 16:45, Boris Ostrovsky wrote:
> > On 11/20/2014 11:15 AM, Ian Campbell wrote:
> >> On Thu, 2014-11-20 at 16:08 +0000, Andrew Cooper wrote:
> >>> On 20/11/14 16:00, Ian Campbell wrote:
> >>>> On Mon, 2014-11-17 at 15:19 +0000, Andrew Cooper wrote:
> >>>>> c/s d1b93ea causes substantial functional regressions in pygrub's
> >>>>> ability to
> >>>>> parse bootloader configuration files.
> >>>>>
> >>>>> c/s d1b93ea itself changed an an interface which previously used
> >>>>> exclusively
> >>>>> integers, to using strings in the case of a grub configuration
> >>>>> with explicit
> >>>>> default set, along with changing the code calling the interface to
> >>>>> require a
> >>>>> string.  The default value for "default" remained as an integer.
> >>>>>
> >>>>> As a result, any Extlinux or Lilo configuration (which drives this
> >>>>> interface
> >>>>> exclusively with integers), or Grub configuration which doesn't
> >>>>> explicitly
> >>>>> declare a default will die with an AttributeError when attempting
> >>>>> to call
> >>>>> "self.cf.default.isdigit()" where "default" is an integer.
> >>>>>
> >>>>> Sadly, this AttributeError gets swallowed by the blanket ignore in
> >>>>> the loop
> >>>>> which searches partitions for valid bootloader configurations,
> >>>>> causing the
> >>>>> issue to be reported as "Unable to find partition containing kernel"
> >>>>>
> >>>>> This patch attempts to fix the issue by altering all parts of this
> >>>>> interface
> >>>>> to use strings, as opposed to integers.
> >>>> Would it be less invasive at this point in the release to have the
> >>>> place
> >>>> where this stuff is used do isinstance(s, str) and isinstance(s, int)?
> >>> It would be BaseString not str, but I am fairly sure the classes have
> >>> altered through Py2's history.  I would not be any more confident with
> >>> that as a solution as trying to correctly to start with.
> >> Actually isinstance(s, basestring) is what the webpage I was looking at
> >> said, but I cut-n-pasted the wrong thing.
> >>
> >> But regardless could it not do something like:
> >>     if !isinstance(foo.cf.default, int):
> >
> > I think it would be the other way around, e.g. (not tested):
> >
> > diff --git a/tools/pygrub/src/pygrub b/tools/pygrub/src/pygrub
> > index aa7e562..7250f45 100644
> > --- a/tools/pygrub/src/pygrub
> > +++ b/tools/pygrub/src/pygrub
> > @@ -457,7 +457,9 @@ class Grub:
> >          self.cf.parse(buf)
> >
> >      def image_index(self):
> > -        if self.cf.default.isdigit():
> > +        if isinstance(self.cf.default, int)
> > +            sel = self.cf.default
> > +        elif if self.cf.default.isdigit():
> >              sel = int(self.cf.default)
> >          else:
> >              # We don't fully support submenus. Look for the leaf
> > value in
> >
> > but yes, this looks less intrusive (assuming this the only place where
> > we'd hit this error).
> >
> 
> That does look plausibly like it would fix the issue.
> 
> However, I can't help but feeing that this is hacking around a broken
> patch in the first place.

I cannot think of a reason you would ever feel that way!
<surreptitiously checks the roll of Xen 4.5 band-aid>

We know that the existing patches work fine for a host of Fedora
families (15->21) (thought I need to double check that the testing framework
that we have is using pygrub and not pvgrub), SLESs and RHEL5s, and OL6s.

The ones that I am worried about are the ExtLinux and such which
I didn't realize would use 'pygrub'.

Thought I just remembered a bug with OL7 grub entries - that is if
you go in the interactive menu things broke down. Boris, do you
remember if that was fixed or just 'deferred'?

> 
> ~Andrew

  reply	other threads:[~2014-11-21 17:09 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-17 15:19 [PATCH for-4.5 RFC] pygrub: Fix regression from c/s d1b93ea, attempt 2 Andrew Cooper
2014-11-17 16:41 ` Boris Ostrovsky
2014-11-17 16:50   ` Andrew Cooper
2014-11-17 16:58 ` Ian Campbell
2014-11-17 16:59   ` Andrew Cooper
2014-11-17 17:15     ` Boris Ostrovsky
2014-11-20 16:00 ` Ian Campbell
2014-11-20 16:08   ` Andrew Cooper
2014-11-20 16:15     ` Ian Campbell
2014-11-20 16:45       ` Boris Ostrovsky
2014-11-21 13:32         ` Andrew Cooper
2014-11-21 17:09           ` Konrad Rzeszutek Wilk [this message]
2014-11-21 17:25             ` Boris Ostrovsky
2014-11-25 14:14           ` Ian Campbell
2014-11-25 16:03             ` Andrew Cooper

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20141121170933.GB8314@laptop.dumpdata.com \
    --to=konrad.wilk@oracle.com \
    --cc=Ian.Campbell@citrix.com \
    --cc=Ian.Jackson@eu.citrix.com \
    --cc=andrew.cooper3@citrix.com \
    --cc=boris.ostrovsky@oracle.com \
    --cc=wei.liu2@citrix.com \
    --cc=xen-devel@lists.xen.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.