[oe-commits] [bitbake] 03/05: server/xmlrpc: Add Heartbeat event support

git at git.openembedded.org git at git.openembedded.org
Fri Jul 7 22:58:55 UTC 2017


This is an automated email from the git hooks/post-receive script.

rpurdie pushed a commit to branch master-next
in repository bitbake.

commit 00bf2e60222767b4dee84fb3f958732a83544e80
Author: Richard Purdie <richard.purdie at linuxfoundation.org>
AuthorDate: Fri Jul 7 15:42:05 2017 +0100

    server/xmlrpc: Add Heartbeat event support
    
    When heartbeat event support was added it was only added to process.py. Add
    it to server/xmlrpc too. There is duplicated code however since we're likely
    to combine the server abstractions soon its not worth worrying about now.
    
    This ensures the backends have the same event support.
    
    [YOCTO #10741]
    
    Signed-off-by: Richard Purdie <richard.purdie at linuxfoundation.org>
---
 lib/bb/server/xmlrpc.py | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/lib/bb/server/xmlrpc.py b/lib/bb/server/xmlrpc.py
index d0f5a6d..1a475e0 100644
--- a/lib/bb/server/xmlrpc.py
+++ b/lib/bb/server/xmlrpc.py
@@ -227,6 +227,8 @@ class XMLRPCServer(SimpleXMLRPCServer, BaseImplServer):
         self.idle_timeout = idle_timeout
         if idle_timeout:
             self.register_idle_function(self.handle_idle_timeout, self)
+        self.heartbeat_seconds = 1 # default, BB_HEARTBEAT_EVENT will be checked once we have a datastore.
+        self.next_heartbeat = time.time()
 
     def addcooker(self, cooker):
         BaseImplServer.addcooker(self, cooker)
@@ -250,6 +252,15 @@ class XMLRPCServer(SimpleXMLRPCServer, BaseImplServer):
         return []
 
     def serve_forever(self):
+        heartbeat_event = self.cooker.data.getVar('BB_HEARTBEAT_EVENT')
+        if heartbeat_event:
+            try:
+                self.heartbeat_seconds = float(heartbeat_event)
+            except:
+                # Throwing an exception here causes bitbake to hang.
+                # Just warn about the invalid setting and continue
+                bb.warn('Ignoring invalid BB_HEARTBEAT_EVENT=%s, must be a float specifying seconds.' % heartbeat_event)
+
         # Start the actual XMLRPC server
         bb.cooker.server_main(self.cooker, self._serve_forever)
 
@@ -297,6 +308,21 @@ class XMLRPCServer(SimpleXMLRPCServer, BaseImplServer):
                 # we ignore interrupted calls
                 pass
 
+            # Create new heartbeat event?
+            now = time.time()
+            if now >= self.next_heartbeat:
+                # We might have missed heartbeats. Just trigger once in
+                # that case and continue after the usual delay.
+                self.next_heartbeat += self.heartbeat_seconds
+                if self.next_heartbeat <= now:
+                    self.next_heartbeat = now + self.heartbeat_seconds
+                heartbeat = bb.event.HeartbeatEvent(now)
+                bb.event.fire(heartbeat, self.cooker.data)
+            if nextsleep and now + nextsleep > self.next_heartbeat:
+                # Shorten timeout so that we we wake up in time for
+                # the heartbeat.
+                nextsleep = self.next_heartbeat - now
+
         # Tell idle functions we're exiting
         for function, data in list(self._idlefuns.items()):
             try:

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the Openembedded-commits mailing list