[bitbake-devel] [PATCH 1/1] bitbake: cookerdata: Avoid double exceptions for bb.fatal()

richard.purdie at linuxfoundation.org richard.purdie at linuxfoundation.org
Thu Aug 15 23:03:51 UTC 2019


On Thu, 2019-08-15 at 19:29 +0800, Robert Yang wrote:
> 
> On 5/14/19 7:02 PM, Robert Yang wrote:
> > 
> > On 5/12/19 4:28 PM, Richard Purdie wrote:
> > > On Thu, 2019-05-09 at 16:03 +0800, Robert Yang wrote:
> > > > The bb.fatal() raises BBHandledException() which causes double
> > > > exceptions,
> > > > e.g.:
> > > > 
> > > > Add 'HOSTTOOLS += "hello"' to conf/local.conf:
> > > > $ bitbake -p
> > > > [snip]
> > > > During handling of the above exception, another exception
> > > > occurred:
> > > > [snip]
> > > > ERROR: The following required tools (as specified by HOSTTOOLS)
> > > > appear to be 
> > > > unavailable in PATH, please install them in order to proceed:
> > > >    hello
> > > > 
> > > > Use "raise" rather than "raise bb.BBHandledException" to fix
> > > > the double
> > > > exceptions.
> > > > 
> > > > [YOCTO #13267]
> > > > 
> > > > Signed-off-by: Robert Yang <liezhi.yang at windriver.com>
> > > > ---
> > > >   bitbake/lib/bb/cookerdata.py | 4 +++-
> > > >   1 file changed, 3 insertions(+), 1 deletion(-)
> > > > 
> > > > diff --git a/bitbake/lib/bb/cookerdata.py
> > > > b/bitbake/lib/bb/cookerdata.py
> > > > index f8ae410..585edc5 100644
> > > > --- a/bitbake/lib/bb/cookerdata.py
> > > > +++ b/bitbake/lib/bb/cookerdata.py
> > > > @@ -301,7 +301,9 @@ class CookerDataBuilder(object):
> > > >               if multiconfig:
> > > >                  
> > > > bb.event.fire(bb.event.MultiConfigParsed(self.mcdata
> > > > ), self.data)
> > > > -        except (SyntaxError, bb.BBHandledException):
> > > > +        except bb.BBHandledException:
> > > > +            raise
> > > > +        except SyntaxError:
> > > >               raise bb.BBHandledException
> > > >           except bb.data_smart.ExpansionError as e:
> > > >               logger.error(str(e))
> > > 
> > > Hi Robert,
> > > 
> > > This doesn't sound right, where is this exception being printed a
> > > second time? The point of "BBHandledException" is to say "don't
> > > print
> > > any further traces for this exception". If this fixes the bug, it
> > > means
> > > something somewhere is printing a trace for a second time when it
> > > should pass through BBHandledException?
> > 
> > Hi RP,
> > 
> > I found another serious problem when tried to raise
> > BBHandledException. There
> > is a deadlock when a recipe is failed to parse, e.g.:
> > 
> > $ echo helloworld >> meta/recipes-extended/bash/bash_4.4.18.bb
> > $ bitbake -p
> > meta/recipes-extended/bash/bash_4.4.18.bb:42: unparsed line:
> > 'helloworld'
> > [hangs]
> > 
> > Then bitbake hangs, we can use Ctrl-C to break it, but the sub
> > processes
> > are still existed, and we need kill them manually, otherwise we
> > can't start
> > bitbake again.
> 
> BTW, things becomes much better after the following two patches are
> merged:
> bitbake: knotty: Fix for the Second Keyboard Interrupt
> bitbake: cooker: Cleanup the queue before call process.join()
> 
> Now we hardly can reproduce the problem:
> echo helloworld >> meta/recipes-extended/bash/bash_4.4.18.bb
> $ while true; do kill-bb; rm -fr bitbake-cookerdaemon.log 
> tmp/cache/default-glibc/qemux86-64/x86_64/bb_cache.dat* ; bitbake -p;
> done
> 
> It's not easy to hang any more, but still hangs sometimes, I tried to
> debug it,
> but didn't find the root cause, the ui/knotty.py can't get event from
> server,
> and goes into a dead loop.
> 
>              event = eventHandler.waitEvent(0)
>              if event is None:
>                  if main.shutdown > 1:
>                      break
>                  termfilter.updateFooter()
>                  event = eventHandler.waitEvent(0.25)
>                  if event is None:
>                      continue
> 
> The main.shutdown is always 0 when it hangs.

In theory there are timeouts there so it should never hang waiting for
an event. Is it looping and not getting an event? or is the other end
disconnected?

I guess the question is what we can do to detect a dead connection, or
if the server is still alive, why the server is hanging and not sending
any events?

Thanks for the patches, those were tricky issues to track down and
solve!

Cheers,

Richard




More information about the bitbake-devel mailing list