[bitbake-devel] [PATCH] bitbake: xmlrpc: set single use mode differently

Brian Avery avery.brian at gmail.com
Mon Mar 28 20:28:03 UTC 2016


Hi,
The original idea behind this fix was to remove the idea that bitbake
would *ever* autoexit.  If a ui starts up a bitbake server then the
server should remain until it is told to exit. Basically, we were
going to remove the single use flag entirely and fix any (if there are
any) issues in knotty that rely on that behaviour.

Thoughts?,
-b
an intel employee

On Thu, Mar 17, 2016 at 4:34 AM, Elliot Smith <elliot.smith at intel.com> wrote:
> From: Ed Bartosh <ed.bartosh at linux.intel.com>
>
> 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]
>
> Signed-off-by: Ed Bartosh <ed.bartosh at linux.intel.com>
> Signed-off-by: Elliot Smith <elliot.smith at 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")
> --
> 1.9.3
>
> ---------------------------------------------------------------------
> Intel Corporation (UK) Limited
> Registered No. 1134945 (England)
> Registered Office: Pipers Way, Swindon SN3 1RJ
> VAT No: 860 2173 47
>
> This e-mail and any attachments may contain confidential material for
> the sole use of the intended recipient(s). Any review or distribution
> by others is strictly prohibited. If you are not the intended
> recipient, please contact the sender and delete all copies.
>
> --
> _______________________________________________
> bitbake-devel mailing list
> bitbake-devel at lists.openembedded.org
> http://lists.openembedded.org/mailman/listinfo/bitbake-devel



More information about the bitbake-devel mailing list