summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@linux.intel.com>2010-01-18 22:14:01 +0000
committerRichard Purdie <rpurdie@linux.intel.com>2010-01-18 22:14:01 +0000
commit19a6dc1fe6e6a0d957710197e4420a3fc2b821f4 (patch)
treedb14197db781c0f43efa55ab9ecedb975a53b763 /lib
parent4d67b81dd837c2132e34fe3354e258fa51ebeaad (diff)
downloadbitbake-19a6dc1fe6e6a0d957710197e4420a3fc2b821f4.tar.gz
server: Improve idle handling timeouts
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'lib')
-rw-r--r--lib/bb/cooker.py2
-rw-r--r--lib/bb/server/none.py43
-rw-r--r--lib/bb/server/xmlrpc.py18
3 files changed, 41 insertions, 22 deletions
diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py
index 55a97cc6c..664847ce6 100644
--- a/lib/bb/cooker.py
+++ b/lib/bb/cooker.py
@@ -786,7 +786,7 @@ class BBCooker:
self.cookerState = cookerParsed
return None
- return 0.00001
+ return True
def checkPackages(self, pkgs_to_build):
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: