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:
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():
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():
[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
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()