[bitbake-devel] [PATCH 2/9] xmlrpc: client - remove fatal errors
Damian, Alexandru
alexandru.damian at intel.com
Wed Jun 4 14:38:49 UTC 2014
Oh, now I get it - my email client didn't highlight that you replied to a
specific line -
this is mostly for debugging purposes, to be able to manually monitor the
bitbake running by
> tail -f bitbake-cookerdaemon.log file
Proabably should be in a different patch, though - let me redo this patch.
Thanks,
Alex
On Wed, Jun 4, 2014 at 2:51 PM, Richard Purdie <
richard.purdie at linuxfoundation.org> wrote:
> On Wed, 2014-06-04 at 14:20 +0100, Damian, Alexandru wrote:
> > Yep, something wrong with it ?
> >
> >
> > The thing is that I'm replacing bb.fatal with bb.warn to get a chance
> > for a remote controlling to intercept errors instead of having the
> > program shutting down.
>
> But we don't want a print statement for ever idle call?
>
> Cheers,
>
> Richard
>
> >
> > Alex
> >
> >
> > On Tue, Jun 3, 2014 at 5:38 PM, Richard Purdie
> > <richard.purdie at linuxfoundation.org> wrote:
> > On Tue, 2014-06-03 at 16:26 +0100, Alex DAMIAN wrote:
> > > From: Alexandru DAMIAN <alexandru.damian at intel.com>
> > >
> > > When we use the XMLRPC client API to connect to a bitbake
> > server,
> > > we want to receive errors from the API instead of having the
> > > API exiting without warning.
> > >
> > > Thus the "bb.fatal" calls have been replaced with "bb.warn"
> > calls,
> > > and we re-raise the original exception for handling by the
> > > original caller.
> > >
> > > The bitbake starting script has been modified to properly
> > test
> > > for failures in calling the client API and handle them.
> > >
> > > Additional error handling added in the client, as to prevent
> > > fatal crashes.
> > >
> > > Signed-off-by: Alexandru DAMIAN <alexandru.damian at intel.com>
> > > ---
> > > bin/bitbake | 23 +++++++++++++----------
> > > lib/bb/server/xmlrpc.py | 22 +++++++++++++++-------
> > > lib/bb/ui/uievent.py | 3 ++-
> > > 3 files changed, 30 insertions(+), 18 deletions(-)
> > >
> > > diff --git a/bin/bitbake b/bin/bitbake
> > > index fcfe043..ab881c5 100755
> > > --- a/bin/bitbake
> > > +++ b/bin/bitbake
> > > @@ -332,26 +332,29 @@ def main():
> > > server =
> > servermodule.BitBakeXMLRPCClient(configParams.observe_only)
> > >
> > server.saveConnectionDetails(configParams.remote_server)
> > >
> > > + def _getServerConnection(server, featureset):
> > > + try:
> > > + server_connection =
> > server.establishConnection(featureset)
> > > + except Exception as e:
> > > + bb.fatal("Could not connect to server %s: %s" %
> > (configParams.remote_server, str(e)))
> > > + return server_connection
> > > +
> > > if not configParams.server_only:
> > > if configParams.status_only:
> > > - try:
> > > - server_connection =
> > server.establishConnection(featureset)
> > > - except:
> > > - sys.exit(1)
> > > - if not server_connection:
> > > - sys.exit(1)
> > > + server_connection =
> > _getServerConnection(server, featureset)
> > > server_connection.terminate()
> > > sys.exit(0)
> > >
> > > # Setup a connection to the server (cooker)
> > > - server_connection =
> > server.establishConnection(featureset)
> > > - if not server_connection:
> > > + try:
> > > + server_connection =
> > server.establishConnection(featureset)
> > > + except:
> > > if configParams.kill_server:
> > > - bb.fatal("Server already killed")
> > > + bb.fatal("Server already offline")
> > > configParams.bind = configParams.remote_server
> > > start_server(servermodule, configParams,
> > configuration, featureset)
> > > bb.event.ui_queue = []
> > > - server_connection =
> > server.establishConnection(featureset)
> > > + server_connection =
> > _getServerConnection(server, featureset)
> > >
> > > # Restore the environment in case the UI needs it
> > > for k in cleanedvars:
> > > diff --git a/lib/bb/server/xmlrpc.py
> > b/lib/bb/server/xmlrpc.py
> > > index 6fc5543..6ec3452 100644
> > > --- a/lib/bb/server/xmlrpc.py
> > > +++ b/lib/bb/server/xmlrpc.py
> > > @@ -80,7 +80,7 @@ class BBTransport(xmlrpclib.Transport):
> > >
> > > def _create_server(host, port, timeout = 60):
> > > t = BBTransport(timeout)
> > > - s = xmlrpclib.Server("http://%s:%d/" % (host, port),
> > transport=t, allow_none=True)
> > > + s = xmlrpclib.ServerProxy("http://%s:%d/" % (host,
> > port), transport=t, allow_none=True)
> > > return s, t
> > >
> > > class BitBakeServerCommands():
> > > @@ -253,13 +253,18 @@ class XMLRPCServer(SimpleXMLRPCServer,
> > BaseImplServer):
> > > socktimeout = self.socket.gettimeout() or
> > nextsleep
> > > socktimeout = min(socktimeout, nextsleep)
> > > # Mirror what BaseServer handle_request would
> > do
> > > - fd_sets = select.select(fds, [], [],
> > socktimeout)
> > > - if fd_sets[0] and self in fd_sets[0]:
> > > - self._handle_request_noblock()
> > > + try:
> > > + fd_sets = select.select(fds, [], [],
> > socktimeout)
> > > + if fd_sets[0] and self in fd_sets[0]:
> > > + self._handle_request_noblock()
> > > + except IOError:
> > > + # we ignore interrupted calls
> > > + pass
> > >
> > > # Tell idle functions we're exiting
> > > for function, data in self._idlefuns.items():
> > > try:
> > > + print "Running idle funcs", function, data
> >
> >
> > Did you mean to leave this in?
> >
> > Cheers,
> >
> > Richard
> >
> > > retval = function(self, data, True)
> > > except:
> > > pass
> > > @@ -346,7 +351,8 @@ class
> > BitBakeXMLRPCClient(BitBakeBaseServer):
> > > [host, port] = self.remote.split(":")
> > > port = int(port)
> > > except Exception as e:
> > > - bb.fatal("Failed to read remote definition (%
> > s)" % str(e))
> > > + bb.warn("Failed to read remote definition (%s)"
> > % str(e))
> > > + raise e
> > >
> > > # We need our IP for the server connection. We get
> > the IP
> > > # by trying to connect with the server
> > > @@ -356,13 +362,15 @@ class
> > BitBakeXMLRPCClient(BitBakeBaseServer):
> > > ip = s.getsockname()[0]
> > > s.close()
> > > except Exception as e:
> > > - bb.fatal("Could not create socket for %s:%s (%
> > s)" % (host, port, str(e)))
> > > + bb.warn("Could not create socket for %s:%s (%
> > s)" % (host, port, str(e)))
> > > + raise e
> > > try:
> > > self.serverImpl = XMLRPCProxyServer(host, port)
> > > self.connection =
> > BitBakeXMLRPCServerConnection(self.serverImpl, (ip, 0),
> > self.observer_only, featureset)
> > > return self.connection.connect()
> > > except Exception as e:
> > > - bb.fatal("Could not connect to server at %s:%s
> > (%s)" % (host, port, str(e)))
> > > + bb.warn("Could not connect to server at %s:%s
> > (%s)" % (host, port, str(e)))
> > > + raise e
> > >
> > > def endSession(self):
> > > self.connection.removeClient()
> > > diff --git a/lib/bb/ui/uievent.py b/lib/bb/ui/uievent.py
> > > index 98658f6..eb760c0 100644
> > > --- a/lib/bb/ui/uievent.py
> > > +++ b/lib/bb/ui/uievent.py
> > > @@ -47,7 +47,8 @@ class BBUIEventQueue:
> > > self.EventHandle =
> > self.BBServer.registerEventHandler(self.host, self.port)
> > >
> > > if (self.EventHandle == None):
> > > - bb.fatal("Could not register UI event handler")
> > > + bb.warn("Could not register UI event handler %
> > s:%d" % (self.host, self.port))
> > > + raise Exception("Could not register UI event
> > handler")
> > >
> > > self.server = server
> > >
> > > --
> > > 1.9.1
> > >
> >
> >
> >
> >
> >
> >
> >
> > --
> > Alex Damian
> > Yocto Project
> >
> > SSG / OTC
>
>
>
--
Alex Damian
Yocto Project
SSG / OTC
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openembedded.org/pipermail/bitbake-devel/attachments/20140604/df259050/attachment-0002.html>
More information about the bitbake-devel
mailing list