From b58e5b1fb3bcacbcfce17a748bca5f60c3528b4f Mon Sep 17 00:00:00 2001 From: Ed Bartosh Date: Thu, 17 Mar 2016 11:34:23 +0000 Subject: bitbake: bitbake: xmlrpc: set single use mode differently Currently xmlrpc server implicitly sets itself into single use mode when bitbake server is started with anonymous port (0) or no port is provided in command line. In this mode bitbake shuts down xmlrpc server after build is done. This assumption is incorrect in some cases. For example Toaster uses bitbake in this mode and expects xmlrpc server to stay in memory. Till recent changes single use mode was always unset due to the bug. When the bug was fixed it broke toaster builds as Toaster couldn't communicate with bitbake server in single use mode. Reimplemented logic of setting single use mode. The mode is explicity set when --server-only command line parameter is not provided to bitbake. It doesn't depend on the port number anymore. [YOCTO #9275] [YOCTO #9240] [YOCTO #9252] (Bitbake rev: afc0dd5c532684f6201b1e12bbf4c226ea19062d) Signed-off-by: Ed Bartosh Signed-off-by: Elliot Smith Signed-off-by: Richard Purdie --- bitbake/lib/bb/main.py | 5 +++-- bitbake/lib/bb/server/process.py | 2 +- bitbake/lib/bb/server/xmlrpc.py | 8 ++++---- 3 files changed, 8 insertions(+), 7 deletions(-) diff --git a/bitbake/lib/bb/main.py b/bitbake/lib/bb/main.py index bf59793db5..a28c7514df 100755 --- a/bitbake/lib/bb/main.py +++ b/bitbake/lib/bb/main.py @@ -282,12 +282,13 @@ class BitBakeConfigParameters(cookerdata.ConfigParameters): def start_server(servermodule, configParams, configuration, features): server = servermodule.BitBakeServer() + single_use = not configParams.server_only if configParams.bind: (host, port) = configParams.bind.split(':') - server.initServer((host, int(port))) + server.initServer((host, int(port)), single_use) configuration.interface = [ server.serverImpl.host, server.serverImpl.port ] else: - server.initServer() + server.initServer(single_use=single_use) configuration.interface = [] try: diff --git a/bitbake/lib/bb/server/process.py b/bitbake/lib/bb/server/process.py index e387b30ee3..a3078a873d 100644 --- a/bitbake/lib/bb/server/process.py +++ b/bitbake/lib/bb/server/process.py @@ -242,7 +242,7 @@ class ProcessEventQueue(multiprocessing.queues.Queue): class BitBakeServer(BitBakeBaseServer): - def initServer(self): + def initServer(self, single_use=True): # establish communication channels. We use bidirectional pipes for # ui <--> server command/response pairs # and a queue for server -> ui event notifications diff --git a/bitbake/lib/bb/server/xmlrpc.py b/bitbake/lib/bb/server/xmlrpc.py index 7528138740..ace1cf646b 100644 --- a/bitbake/lib/bb/server/xmlrpc.py +++ b/bitbake/lib/bb/server/xmlrpc.py @@ -186,12 +186,12 @@ class XMLRPCServer(SimpleXMLRPCServer, BaseImplServer): # remove this when you're done with debugging # allow_reuse_address = True - def __init__(self, interface): + def __init__(self, interface, single_use=False): """ Constructor """ BaseImplServer.__init__(self) - self.single_use = interface[1] == 0 # anonymous port, not getting reused + self.single_use = single_use # Use auto port configuration if (interface[1] == -1): interface = (interface[0], 0) @@ -332,9 +332,9 @@ class BitBakeXMLRPCServerConnection(BitBakeBaseServerConnection): pass class BitBakeServer(BitBakeBaseServer): - def initServer(self, interface = ("localhost", 0)): + def initServer(self, interface = ("localhost", 0), single_use = False): self.interface = interface - self.serverImpl = XMLRPCServer(interface) + self.serverImpl = XMLRPCServer(interface, single_use) def detach(self): daemonize.createDaemon(self.serverImpl.serve_forever, "bitbake-cookerdaemon.log") -- cgit 1.2.3-korg