mirror of
https://git.yoctoproject.org/poky
synced 2026-09-29 07:36:20 +02:00
bitbake: Cleanup bitbake server init process to be clearer to follow
Create a standard format server class instance with method calls for each step in the server setup. There should be enough hooks for each of the different server types. Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
@@ -40,7 +40,7 @@ from bb import cooker
|
|||||||
from bb import ui
|
from bb import ui
|
||||||
from bb import server
|
from bb import server
|
||||||
from bb.server import none
|
from bb.server import none
|
||||||
#from bb.server import xmlrpc
|
from bb.server import xmlrpc
|
||||||
|
|
||||||
__version__ = "1.13.0"
|
__version__ = "1.13.0"
|
||||||
logger = logging.getLogger("BitBake")
|
logger = logging.getLogger("BitBake")
|
||||||
@@ -173,9 +173,6 @@ Default BBFILES are the .bb files in the current directory.""")
|
|||||||
|
|
||||||
ui_main = get_ui(configuration)
|
ui_main = get_ui(configuration)
|
||||||
|
|
||||||
#server = bb.server.xmlrpc
|
|
||||||
server = bb.server.none
|
|
||||||
|
|
||||||
# Save a logfile for cooker into the current working directory. When the
|
# Save a logfile for cooker into the current working directory. When the
|
||||||
# server is daemonized this logfile will be truncated.
|
# server is daemonized this logfile will be truncated.
|
||||||
cooker_logfile = os.path.join(os.getcwd(), "cooker.log")
|
cooker_logfile = os.path.join(os.getcwd(), "cooker.log")
|
||||||
@@ -192,21 +189,29 @@ Default BBFILES are the .bb files in the current directory.""")
|
|||||||
# of the UIs (e.g. for DISPLAY, etc.)
|
# of the UIs (e.g. for DISPLAY, etc.)
|
||||||
bb.utils.clean_environment()
|
bb.utils.clean_environment()
|
||||||
|
|
||||||
cooker = bb.cooker.BBCooker(configuration, server)
|
#server = bb.server.xmlrpc.BitBakeServer()
|
||||||
|
server = bb.server.none.BitBakeServer()
|
||||||
|
|
||||||
|
server.initServer()
|
||||||
|
idle = server.getServerIdleCB()
|
||||||
|
|
||||||
|
cooker = bb.cooker.BBCooker(configuration, idle)
|
||||||
cooker.parseCommandLine()
|
cooker.parseCommandLine()
|
||||||
|
|
||||||
serverinfo = server.BitbakeServerInfo(cooker.server)
|
server.addcooker(cooker)
|
||||||
|
server.saveConnectionDetails()
|
||||||
|
server.detach(cooker_logfile)
|
||||||
|
|
||||||
server.BitBakeServerFork(cooker, cooker.server, serverinfo, cooker_logfile)
|
# Should no longer need to ever reference cooker
|
||||||
del cooker
|
del cooker
|
||||||
|
|
||||||
logger.removeHandler(handler)
|
logger.removeHandler(handler)
|
||||||
|
|
||||||
# Setup a connection to the server (cooker)
|
# Setup a connection to the server (cooker)
|
||||||
server_connection = server.BitBakeServerConnection(serverinfo)
|
server_connection = server.establishConnection()
|
||||||
|
|
||||||
try:
|
try:
|
||||||
return server.BitbakeUILauch().launch(serverinfo, ui_main, server_connection.connection, server_connection.events)
|
return server.launchUI(ui_main, server_connection.connection, server_connection.events)
|
||||||
finally:
|
finally:
|
||||||
server_connection.terminate()
|
server_connection.terminate()
|
||||||
|
|
||||||
|
|||||||
@@ -82,7 +82,7 @@ class Command:
|
|||||||
if command not in CommandsAsync.__dict__:
|
if command not in CommandsAsync.__dict__:
|
||||||
return "No such command"
|
return "No such command"
|
||||||
self.currentAsyncCommand = (command, commandline)
|
self.currentAsyncCommand = (command, commandline)
|
||||||
self.cooker.server.register_idle_function(self.cooker.runCommands, self.cooker)
|
self.cooker.server_registration_cb(self.cooker.runCommands, self.cooker)
|
||||||
return True
|
return True
|
||||||
except:
|
except:
|
||||||
import traceback
|
import traceback
|
||||||
|
|||||||
@@ -63,12 +63,11 @@ class BBCooker:
|
|||||||
Manages one bitbake build run
|
Manages one bitbake build run
|
||||||
"""
|
"""
|
||||||
|
|
||||||
def __init__(self, configuration, server):
|
def __init__(self, configuration, server_registration_cb):
|
||||||
self.status = None
|
self.status = None
|
||||||
self.appendlist = {}
|
self.appendlist = {}
|
||||||
|
|
||||||
if server:
|
self.server_registration_cb = server_registration_cb
|
||||||
self.server = server.BitBakeServer(self)
|
|
||||||
|
|
||||||
self.configuration = configuration
|
self.configuration = configuration
|
||||||
|
|
||||||
@@ -109,7 +108,7 @@ class BBCooker:
|
|||||||
|
|
||||||
self.configuration.data = bb.data.init()
|
self.configuration.data = bb.data.init()
|
||||||
|
|
||||||
if not server:
|
if not self.server_registration_cb:
|
||||||
bb.data.setVar("BB_WORKERCONTEXT", "1", self.configuration.data)
|
bb.data.setVar("BB_WORKERCONTEXT", "1", self.configuration.data)
|
||||||
|
|
||||||
bb.data.inheritFromOS(self.configuration.data)
|
bb.data.inheritFromOS(self.configuration.data)
|
||||||
@@ -831,7 +830,7 @@ class BBCooker:
|
|||||||
return True
|
return True
|
||||||
return retval
|
return retval
|
||||||
|
|
||||||
self.server.register_idle_function(buildFileIdle, rq)
|
self.server_registration_cb(buildFileIdle, rq)
|
||||||
|
|
||||||
def buildTargets(self, targets, task):
|
def buildTargets(self, targets, task):
|
||||||
"""
|
"""
|
||||||
@@ -890,7 +889,7 @@ class BBCooker:
|
|||||||
|
|
||||||
rq = bb.runqueue.RunQueue(self, self.configuration.data, self.status, taskdata, runlist)
|
rq = bb.runqueue.RunQueue(self, self.configuration.data, self.status, taskdata, runlist)
|
||||||
|
|
||||||
self.server.register_idle_function(buildTargetsIdle, rq)
|
self.server_registration_cb(buildTargetsIdle, rq)
|
||||||
|
|
||||||
def updateCache(self):
|
def updateCache(self):
|
||||||
if self.state == state.running:
|
if self.state == state.running:
|
||||||
|
|||||||
@@ -36,8 +36,7 @@ DEBUG = False
|
|||||||
import inspect, select
|
import inspect, select
|
||||||
|
|
||||||
class BitBakeServerCommands():
|
class BitBakeServerCommands():
|
||||||
def __init__(self, server, cooker):
|
def __init__(self, server):
|
||||||
self.cooker = cooker
|
|
||||||
self.server = server
|
self.server = server
|
||||||
|
|
||||||
def runCommand(self, command):
|
def runCommand(self, command):
|
||||||
@@ -106,13 +105,17 @@ class BBUIEventQueue:
|
|||||||
def chldhandler(signum, stackframe):
|
def chldhandler(signum, stackframe):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class BitBakeServer():
|
class BitBakeNoneServer():
|
||||||
# remove this when you're done with debugging
|
# remove this when you're done with debugging
|
||||||
# allow_reuse_address = True
|
# allow_reuse_address = True
|
||||||
|
|
||||||
def __init__(self, cooker):
|
def __init__(self):
|
||||||
self._idlefuns = {}
|
self._idlefuns = {}
|
||||||
self.commands = BitBakeServerCommands(self, cooker)
|
self.commands = BitBakeServerCommands(self)
|
||||||
|
|
||||||
|
def addcooker(self, cooker):
|
||||||
|
self.cooker = cooker
|
||||||
|
self.commands.cooker = cooker
|
||||||
|
|
||||||
def register_idle_function(self, function, data):
|
def register_idle_function(self, function, data):
|
||||||
"""Register a function to be called while the server is idle"""
|
"""Register a function to be called while the server is idle"""
|
||||||
@@ -157,25 +160,10 @@ class BitBakeServer():
|
|||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class BitbakeServerInfo():
|
|
||||||
def __init__(self, server):
|
|
||||||
self.server = server
|
|
||||||
self.commands = server.commands
|
|
||||||
|
|
||||||
class BitBakeServerFork():
|
|
||||||
def __init__(self, cooker, server, serverinfo, logfile):
|
|
||||||
serverinfo.logfile = logfile
|
|
||||||
serverinfo.cooker = cooker
|
|
||||||
serverinfo.server = server
|
|
||||||
|
|
||||||
class BitbakeUILauch():
|
|
||||||
def launch(self, serverinfo, uifunc, *args):
|
|
||||||
return bb.cooker.server_main(serverinfo.cooker, uifunc, *args)
|
|
||||||
|
|
||||||
class BitBakeServerConnection():
|
class BitBakeServerConnection():
|
||||||
def __init__(self, serverinfo):
|
def __init__(self, server):
|
||||||
self.server = serverinfo.server
|
self.server = server.server
|
||||||
self.connection = serverinfo.commands
|
self.connection = self.server.commands
|
||||||
self.events = bb.server.none.BBUIEventQueue(self.server)
|
self.events = bb.server.none.BBUIEventQueue(self.server)
|
||||||
for event in bb.event.ui_queue:
|
for event in bb.event.ui_queue:
|
||||||
self.events.queue_event(event)
|
self.events.queue_event(event)
|
||||||
@@ -189,3 +177,28 @@ class BitBakeServerConnection():
|
|||||||
self.connection.terminateServer()
|
self.connection.terminateServer()
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class BitBakeServer(object):
|
||||||
|
def initServer(self):
|
||||||
|
self.server = BitBakeNoneServer()
|
||||||
|
|
||||||
|
def addcooker(self, cooker):
|
||||||
|
self.cooker = cooker
|
||||||
|
self.server.addcooker(cooker)
|
||||||
|
|
||||||
|
def getServerIdleCB(self):
|
||||||
|
return self.server.register_idle_function
|
||||||
|
|
||||||
|
def saveConnectionDetails(self):
|
||||||
|
return
|
||||||
|
|
||||||
|
def detach(self, cooker_logfile):
|
||||||
|
self.logfile = cooker_logfile
|
||||||
|
|
||||||
|
def establishConnection(self):
|
||||||
|
self.connection = BitBakeServerConnection(self)
|
||||||
|
return self.connection
|
||||||
|
|
||||||
|
def launchUI(self, uifunc, *args):
|
||||||
|
return bb.cooker.server_main(self.cooker, uifunc, *args)
|
||||||
|
|
||||||
|
|||||||
@@ -122,8 +122,7 @@ def _create_server(host, port):
|
|||||||
return s
|
return s
|
||||||
|
|
||||||
class BitBakeServerCommands():
|
class BitBakeServerCommands():
|
||||||
def __init__(self, server, cooker):
|
def __init__(self, server):
|
||||||
self.cooker = cooker
|
|
||||||
self.server = server
|
self.server = server
|
||||||
|
|
||||||
def registerEventHandler(self, host, port):
|
def registerEventHandler(self, host, port):
|
||||||
@@ -160,11 +159,11 @@ class BitBakeServerCommands():
|
|||||||
"""
|
"""
|
||||||
return True
|
return True
|
||||||
|
|
||||||
class BitBakeServer(SimpleXMLRPCServer):
|
class BitBakeXMLRPCServer(SimpleXMLRPCServer):
|
||||||
# remove this when you're done with debugging
|
# remove this when you're done with debugging
|
||||||
# allow_reuse_address = True
|
# allow_reuse_address = True
|
||||||
|
|
||||||
def __init__(self, cooker, interface = ("localhost", 0)):
|
def __init__(self, interface = ("localhost", 0)):
|
||||||
"""
|
"""
|
||||||
Constructor
|
Constructor
|
||||||
"""
|
"""
|
||||||
@@ -174,9 +173,12 @@ class BitBakeServer(SimpleXMLRPCServer):
|
|||||||
self._idlefuns = {}
|
self._idlefuns = {}
|
||||||
self.host, self.port = self.socket.getsockname()
|
self.host, self.port = self.socket.getsockname()
|
||||||
#self.register_introspection_functions()
|
#self.register_introspection_functions()
|
||||||
commands = BitBakeServerCommands(self, cooker)
|
self.commands = BitBakeServerCommands(self)
|
||||||
self.autoregister_all_functions(commands, "")
|
self.autoregister_all_functions(self.commands, "")
|
||||||
|
|
||||||
|
def addcooker(self, cooker):
|
||||||
self.cooker = cooker
|
self.cooker = cooker
|
||||||
|
self.commands.cooker = cooker
|
||||||
|
|
||||||
def autoregister_all_functions(self, context, prefix):
|
def autoregister_all_functions(self, context, prefix):
|
||||||
"""
|
"""
|
||||||
@@ -244,14 +246,6 @@ class BitbakeServerInfo():
|
|||||||
self.host = server.host
|
self.host = server.host
|
||||||
self.port = server.port
|
self.port = server.port
|
||||||
|
|
||||||
class BitBakeServerFork():
|
|
||||||
def __init__(self, cooker, server, serverinfo, logfile):
|
|
||||||
daemonize.createDaemon(server.serve_forever, logfile)
|
|
||||||
|
|
||||||
class BitbakeUILauch():
|
|
||||||
def launch(self, serverinfo, uifunc, *args):
|
|
||||||
return uifunc(*args)
|
|
||||||
|
|
||||||
class BitBakeServerConnection():
|
class BitBakeServerConnection():
|
||||||
def __init__(self, serverinfo):
|
def __init__(self, serverinfo):
|
||||||
self.connection = _create_server(serverinfo.host, serverinfo.port)
|
self.connection = _create_server(serverinfo.host, serverinfo.port)
|
||||||
@@ -271,3 +265,31 @@ class BitBakeServerConnection():
|
|||||||
self.connection.terminateServer()
|
self.connection.terminateServer()
|
||||||
except:
|
except:
|
||||||
pass
|
pass
|
||||||
|
|
||||||
|
class BitBakeServer(object):
|
||||||
|
def initServer(self):
|
||||||
|
self.server = BitBakeXMLRPCServer()
|
||||||
|
|
||||||
|
def addcooker(self, cooker):
|
||||||
|
self.cooker = cooker
|
||||||
|
self.server.addcooker(cooker)
|
||||||
|
|
||||||
|
def getServerIdleCB(self):
|
||||||
|
return self.server.register_idle_function
|
||||||
|
|
||||||
|
def saveConnectionDetails(self):
|
||||||
|
self.serverinfo = BitbakeServerInfo(self.server)
|
||||||
|
|
||||||
|
def detach(self, cooker_logfile):
|
||||||
|
daemonize.createDaemon(self.server.serve_forever, cooker_logfile)
|
||||||
|
del self.cooker
|
||||||
|
del self.server
|
||||||
|
|
||||||
|
def establishConnection(self):
|
||||||
|
self.connection = BitBakeServerConnection(self.serverinfo)
|
||||||
|
return self.connection
|
||||||
|
|
||||||
|
def launchUI(self, uifunc, *args):
|
||||||
|
return uifunc(*args)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user