[oe-commits] [bitbake] 01/02: Revert "hashserv: Drop handler thread"
git at git.openembedded.org
git at git.openembedded.org
Sun Sep 15 17:00:24 UTC 2019
This is an automated email from the git hooks/post-receive script.
rpurdie pushed a commit to branch master-next
in repository bitbake.
commit 37ab9c0061b9bb33871cf73e0a9c74587030c609
Author: Richard Purdie <richard.purdie at linuxfoundation.org>
AuthorDate: Sun Sep 15 17:56:15 2019 +0100
Revert "hashserv: Drop handler thread"
This reverts commit f885155ff982ed19e39bad59169ef8c97deb4c6d.
---
lib/hashserv/__init__.py | 62 ++++++++++++++++++++++++++++++++++++++++++++----
1 file changed, 57 insertions(+), 5 deletions(-)
diff --git a/lib/hashserv/__init__.py b/lib/hashserv/__init__.py
index 9d5722a..eb03c32 100644
--- a/lib/hashserv/__init__.py
+++ b/lib/hashserv/__init__.py
@@ -24,8 +24,17 @@ class HashEquivalenceServer(BaseHTTPRequestHandler):
def log_message(self, f, *args):
logger.debug(f, *args)
+ def opendb(self):
+ self.db = sqlite3.connect(self.dbname)
+ self.db.row_factory = sqlite3.Row
+ self.db.execute("PRAGMA synchronous = OFF;")
+ self.db.execute("PRAGMA journal_mode = MEMORY;")
+
def do_GET(self):
try:
+ if not self.db:
+ self.opendb()
+
p = urllib.parse.urlparse(self.path)
if p.path != self.prefix + '/v1/equivalent':
@@ -58,6 +67,9 @@ class HashEquivalenceServer(BaseHTTPRequestHandler):
def do_POST(self):
try:
+ if not self.db:
+ self.opendb()
+
p = urllib.parse.urlparse(self.path)
if p.path != self.prefix + '/v1/equivalent':
@@ -129,22 +141,62 @@ class HashEquivalenceServer(BaseHTTPRequestHandler):
self.send_error(400, explain=traceback.format_exc())
return
-class HashHTTPServer(HTTPServer):
+class ThreadedHTTPServer(HTTPServer):
+ quit = False
+
+ def serve_forever(self):
+ self.requestqueue = queue.Queue()
+ self.handlerthread = threading.Thread(target=self.process_request_thread)
+ self.handlerthread.daemon = False
+
+ self.handlerthread.start()
+
+ signal.signal(signal.SIGTERM, self.sigterm_exception)
+ super().serve_forever()
+ os._exit(0)
+
+ def sigterm_exception(self, signum, stackframe):
+ self.server_close()
+ os._exit(0)
+
def server_bind(self):
HTTPServer.server_bind(self)
self.socket.setsockopt(socket.SOL_SOCKET, socket.SO_LINGER, struct.pack('ii', 1, 0))
+ def process_request_thread(self):
+ while not self.quit:
+ try:
+ (request, client_address) = self.requestqueue.get(True)
+ except queue.Empty:
+ continue
+ if request is None:
+ continue
+ try:
+ self.finish_request(request, client_address)
+ except Exception:
+ self.handle_error(request, client_address)
+ finally:
+ self.shutdown_request(request)
+ os._exit(0)
+
+ def process_request(self, request, client_address):
+ self.requestqueue.put((request, client_address))
+
+ def server_close(self):
+ super().server_close()
+ self.quit = True
+ self.requestqueue.put((None, None))
+ self.handlerthread.join()
+
def create_server(addr, dbname, prefix=''):
class Handler(HashEquivalenceServer):
pass
db = sqlite3.connect(dbname)
db.row_factory = sqlite3.Row
- db.execute("PRAGMA synchronous = OFF;")
- db.execute("PRAGMA journal_mode = MEMORY;")
Handler.prefix = prefix
- Handler.db = db
+ Handler.db = None
Handler.dbname = dbname
with contextlib.closing(db.cursor()) as cursor:
@@ -171,7 +223,7 @@ def create_server(addr, dbname, prefix=''):
cursor.execute('CREATE INDEX IF NOT EXISTS taskhash_lookup ON tasks_v2 (method, taskhash)')
cursor.execute('CREATE INDEX IF NOT EXISTS outhash_lookup ON tasks_v2 (method, outhash)')
- ret = HashHTTPServer(addr, Handler)
+ ret = ThreadedHTTPServer(addr, Handler)
logger.info('Starting server on %s\n', ret.server_port)
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the Openembedded-commits
mailing list