[Toaster] [PATCH] bitbake: xmlrpc: set single use mode differently

Barros Pena, Belen belen.barros.pena at intel.com
Mon Mar 21 05:30:01 PDT 2016



On 17/03/2016 07:21, "toaster-bounces at yoctoproject.org on behalf of Ed
Bartosh" <toaster-bounces at yoctoproject.org on behalf of
ed.bartosh at linux.intel.com> wrote:

>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]

I know this has been sent upstream, but fwiw, I've applied it on top of
master and Toaster still refuses to build. Starting a build spawns a ton
of process like this

python /home/belen/toaster/bitbake/bin/bitbake --read conf/toaster.conf
--server-only -t xmlrpc -B 0.0.0.0:0


I could be doing something wrong though.

Cheers

Belén


>
>Signed-off-by: Ed Bartosh <ed.bartosh at linux.intel.com>
>---
> 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 bf59793..a28c751 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 e387b30..a3078a8 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 a79b490..48d45d8 100644
>--- a/bitbake/lib/bb/server/xmlrpc.py
>+++ b/bitbake/lib/bb/server/xmlrpc.py
>@@ -189,12 +189,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)
>@@ -335,9 +335,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")
>-- 
>2.1.4
>
>-- 
>_______________________________________________
>toaster mailing list
>toaster at yoctoproject.org
>https://lists.yoctoproject.org/listinfo/toaster



More information about the toaster mailing list