From: Richard Purdie <richard.purdie@linuxfoundation.org>
To: Alex DAMIAN <alexandru.damian@intel.com>
Cc: bitbake-devel@lists.openembedded.org
Subject: Re: [PATCH 2/9] xmlrpc: client - remove fatal errors
Date: Tue, 03 Jun 2014 17:38:44 +0100 [thread overview]
Message-ID: <1401813524.12440.112.camel@ted> (raw)
In-Reply-To: <553c5d33afe658883ceab81d0fe8b0318300dbe7.1401808899.git.alexandru.damian@intel.com>
On Tue, 2014-06-03 at 16:26 +0100, Alex DAMIAN wrote:
> From: Alexandru DAMIAN <alexandru.damian@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@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
>
next prev parent reply other threads:[~2014-06-03 16:39 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-06-03 15:26 [PATCH 0/9] toaster build functionality - preparatory patches Alex DAMIAN
2014-06-03 15:26 ` [PATCH 1/9] bitbake: move configuration reading code Alex DAMIAN
2014-06-03 15:26 ` [PATCH 2/9] xmlrpc: client - remove fatal errors Alex DAMIAN
2014-06-03 16:38 ` Richard Purdie [this message]
2014-06-04 13:20 ` Damian, Alexandru
2014-06-04 13:51 ` Richard Purdie
2014-06-04 14:38 ` Damian, Alexandru
2014-06-04 14:47 ` [PATCH 2/9 v2] " Alex DAMIAN
2014-06-04 14:48 ` Damian, Alexandru
2014-06-03 15:26 ` [PATCH 3/9] uievent: retry on handler registration failure Alex DAMIAN
2014-06-03 15:26 ` [PATCH 4/9] toaster: read database settings from the environment Alex DAMIAN
2014-06-03 15:26 ` [PATCH 5/9] toaster: startup script noweb mode Alex DAMIAN
2014-06-03 15:26 ` [PATCH 6/9] toaster: startup script standalone mode Alex DAMIAN
2014-06-03 15:26 ` [PATCH 7/9] toaster: update toaster to run in managed mode Alex DAMIAN
2014-06-03 15:26 ` [PATCH 8/9] toaster: add project related models Alex DAMIAN
2014-06-03 15:26 ` [PATCH 9/9] toasterui: fix django settings environment value Alex DAMIAN
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=1401813524.12440.112.camel@ted \
--to=richard.purdie@linuxfoundation.org \
--cc=alexandru.damian@intel.com \
--cc=bitbake-devel@lists.openembedded.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.