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