Skip to content
This repository has been archived by the owner on Jun 2, 2020. It is now read-only.

Commit

Permalink
bitbake: bitbake: implement idle timeout for xmlrpc server
Browse files Browse the repository at this point in the history
Idle timeout can be specified either by -T/--idle-timeout option or
by sessing BBTIMEOUT environment variable. Bitbake xmlrpc server
will unload itself when timeout exprired, i.e. when server is idle
for more than <idle timeout> seconds.

[YOCTO #5534]

(Bitbake rev: 5fa0b3a19e7d0f40790f737abeddf499d53f1f6a)

Signed-off-by: Ed Bartosh <[email protected]>
Signed-off-by: Richard Purdie <[email protected]>
  • Loading branch information
Ed Bartosh authored and rpurdie committed Jul 21, 2016
1 parent 4cba010 commit 3177082
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 4 deletions.
7 changes: 6 additions & 1 deletion bitbake/lib/bb/main.py
Original file line number Diff line number Diff line change
Expand Up @@ -253,6 +253,10 @@ def parseCommandLine(self, argv=sys.argv):
parser.add_option("-B", "--bind", action="store", dest="bind", default=False,
help="The name/address for the bitbake server to bind to.")

parser.add_option("-T", "--idle-timeout", type=int,
default=int(os.environ.get("BBTIMEOUT", "0")),
help="Set timeout to unload bitbake server due to inactivity")

parser.add_option("", "--no-setscene", action="store_true",
dest="nosetscene", default=False,
help="Do not run any setscene tasks. sstate will be ignored and "
Expand Down Expand Up @@ -337,7 +341,8 @@ def start_server(servermodule, configParams, configuration, features):
single_use = not configParams.server_only and os.getenv('BBSERVER') != 'autostart'
if configParams.bind:
(host, port) = configParams.bind.split(':')
server.initServer((host, int(port)), single_use=single_use)
server.initServer((host, int(port)), single_use=single_use,
idle_timeout=configParams.idle_timeout)
configuration.interface = [server.serverImpl.host, server.serverImpl.port]
else:
server.initServer(single_use=single_use)
Expand Down
19 changes: 16 additions & 3 deletions bitbake/lib/bb/server/xmlrpc.py
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ class XMLRPCServer(SimpleXMLRPCServer, BaseImplServer):
# remove this when you're done with debugging
# allow_reuse_address = True

def __init__(self, interface, single_use=False):
def __init__(self, interface, single_use=False, idle_timeout=0):
"""
Constructor
"""
Expand All @@ -223,6 +223,10 @@ def __init__(self, interface, single_use=False):
self.commands = BitBakeServerCommands(self)
self.autoregister_all_functions(self.commands, "")
self.interface = interface
self.time = time.time()
self.idle_timeout = idle_timeout
if idle_timeout:
self.register_idle_function(self.handle_idle_timeout, self)

def addcooker(self, cooker):
BaseImplServer.addcooker(self, cooker)
Expand All @@ -238,6 +242,12 @@ def autoregister_all_functions(self, context, prefix):
if name.startswith(prefix):
self.register_function(method, name[len(prefix):])

def handle_idle_timeout(self, server, data, abort):
if not abort:
if time.time() - server.time > server.idle_timeout:
server.quit = True
print("Server idle timeout expired")
return []

def serve_forever(self):
# Start the actual XMLRPC server
Expand Down Expand Up @@ -280,6 +290,8 @@ def _serve_forever(self):
try:
fd_sets = select.select(fds, [], [], socktimeout)
if fd_sets[0] and self in fd_sets[0]:
if self.idle_timeout:
self.time = time.time()
self._handle_request_noblock()
except IOError:
# we ignore interrupted calls
Expand Down Expand Up @@ -351,9 +363,10 @@ def terminate(self):
pass

class BitBakeServer(BitBakeBaseServer):
def initServer(self, interface = ("localhost", 0), single_use = False):
def initServer(self, interface = ("localhost", 0),
single_use = False, idle_timeout=0):
self.interface = interface
self.serverImpl = XMLRPCServer(interface, single_use)
self.serverImpl = XMLRPCServer(interface, single_use, idle_timeout)

def detach(self):
daemonize.createDaemon(self.serverImpl.serve_forever, "bitbake-cookerdaemon.log")
Expand Down

0 comments on commit 3177082

Please sign in to comment.