diff options
author | Richard Purdie <rpurdie@linux.intel.com> | 2010-01-18 22:14:01 +0000 |
---|---|---|
committer | Richard Purdie <rpurdie@linux.intel.com> | 2010-01-18 22:14:01 +0000 |
commit | 19a6dc1fe6e6a0d957710197e4420a3fc2b821f4 (patch) | |
tree | db14197db781c0f43efa55ab9ecedb975a53b763 /lib/bb/server | |
parent | 4d67b81dd837c2132e34fe3354e258fa51ebeaad (diff) | |
download | bitbake-19a6dc1fe6e6a0d957710197e4420a3fc2b821f4.tar.gz |
server: Improve idle handling timeouts
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'lib/bb/server')
-rw-r--r-- | lib/bb/server/none.py | 43 | ||||
-rw-r--r-- | lib/bb/server/xmlrpc.py | 18 |
2 files changed, 40 insertions, 21 deletions
diff --git a/lib/bb/server/none.py b/lib/bb/server/none.py index 671460f84..ed608fc04 100644 --- a/lib/bb/server/none.py +++ b/lib/bb/server/none.py @@ -31,6 +31,7 @@ in the server's main loop. """ +import time import bb from bb.ui import uievent import xmlrpclib @@ -49,7 +50,7 @@ class BitBakeServerCommands(): """ Run a cooker command on the server """ - print "Running Command %s" % command + #print "Running Command %s" % command return self.cooker.command.runCommand(command) def terminateServer(self): @@ -92,7 +93,10 @@ class BBUIEventQueue: return self.eventQueue.pop(0) def waitEvent(self, delay): - self.BBServer.idle_commands() + event = self.getEvent() + if event: + return event + self.BBServer.idle_commands(delay) return self.getEvent() def queue_event(self, event): @@ -114,23 +118,32 @@ class BitBakeServer(): assert callable(function) self._idlefuns[function] = data - def idle_commands(self): + def idle_commands(self, delay): #print "Idle queue length %s" % len(self._idlefuns) #print "Idle timeout, running idle functions" #if len(self._idlefuns) == 0: - - + nextsleep = delay for function, data in self._idlefuns.items(): - try: - retval = function(self, data, False) - if not retval: - del self._idlefuns[function] - except SystemExit: - raise - except: - import traceback - traceback.print_exc() - pass + try: + retval = function(self, data, False) + #print "Idle function returned %s" % (retval) + if retval is False: + del self._idlefuns[function] + elif retval is True: + nextsleep = None + elif nextsleep is None: + continue + elif retval < nextsleep: + nextsleep = retval + except SystemExit: + raise + except: + import traceback + traceback.print_exc() + pass + if nextsleep is not None: + #print "Sleeping for %s (%s)" % (nextsleep, delay) + time.sleep(nextsleep) def server_exit(self): # Tell idle functions we're exiting diff --git a/lib/bb/server/xmlrpc.py b/lib/bb/server/xmlrpc.py index e7b7183fb..b36c500bd 100644 --- a/lib/bb/server/xmlrpc.py +++ b/lib/bb/server/xmlrpc.py @@ -116,26 +116,32 @@ class BitBakeServer(SimpleXMLRPCServer): Serve Requests. Overloaded to honor a quit command """ self.quit = False + self.timeout = 0 # Run Idle calls for our first callback while not self.quit: #print "Idle queue length %s" % len(self._idlefuns) - if len(self._idlefuns) == 0: - self.timeout = None - else: - self.timeout = 0 self.handle_request() #print "Idle timeout, running idle functions" + nextsleep = None for function, data in self._idlefuns.items(): try: retval = function(self, data, False) - if not retval: + if retval is False: del self._idlefuns[function] + elif retval is True: + nextsleep = 0 + elif nextsleep is 0: + continue + elif nextsleep is None: + nextsleep = retval + elif retval < nextsleep: + nextsleep = retval except SystemExit: raise except: import traceback traceback.print_exc() pass - + self.timeout = nextsleep # Tell idle functions we're exiting for function, data in self._idlefuns.items(): try: |