diff options
Diffstat (limited to 'bitbake/lib/hashserv/server.py')
-rw-r--r-- | bitbake/lib/hashserv/server.py | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/bitbake/lib/hashserv/server.py b/bitbake/lib/hashserv/server.py index 68f64f983b..58f95c7bcd 100644 --- a/bitbake/lib/hashserv/server.py +++ b/bitbake/lib/hashserv/server.py | |||
@@ -10,6 +10,7 @@ import math | |||
10 | import time | 10 | import time |
11 | import os | 11 | import os |
12 | import base64 | 12 | import base64 |
13 | import json | ||
13 | import hashlib | 14 | import hashlib |
14 | from . import create_async_client | 15 | from . import create_async_client |
15 | import bb.asyncrpc | 16 | import bb.asyncrpc |
@@ -256,6 +257,7 @@ class ServerClient(bb.asyncrpc.AsyncServerConnection): | |||
256 | "backfill-wait": self.handle_backfill_wait, | 257 | "backfill-wait": self.handle_backfill_wait, |
257 | "remove": self.handle_remove, | 258 | "remove": self.handle_remove, |
258 | "gc-mark": self.handle_gc_mark, | 259 | "gc-mark": self.handle_gc_mark, |
260 | "gc-mark-stream": self.handle_gc_mark_stream, | ||
259 | "gc-sweep": self.handle_gc_sweep, | 261 | "gc-sweep": self.handle_gc_sweep, |
260 | "gc-status": self.handle_gc_status, | 262 | "gc-status": self.handle_gc_status, |
261 | "clean-unused": self.handle_clean_unused, | 263 | "clean-unused": self.handle_clean_unused, |
@@ -584,6 +586,33 @@ class ServerClient(bb.asyncrpc.AsyncServerConnection): | |||
584 | return {"count": await self.db.gc_mark(mark, condition)} | 586 | return {"count": await self.db.gc_mark(mark, condition)} |
585 | 587 | ||
586 | @permissions(DB_ADMIN_PERM) | 588 | @permissions(DB_ADMIN_PERM) |
589 | async def handle_gc_mark_stream(self, request): | ||
590 | async def handler(line): | ||
591 | try: | ||
592 | decoded_line = json.loads(line) | ||
593 | except json.JSONDecodeError as exc: | ||
594 | raise bb.asyncrpc.InvokeError( | ||
595 | "Could not decode JSONL input '%s'" % line | ||
596 | ) from exc | ||
597 | |||
598 | try: | ||
599 | mark = decoded_line["mark"] | ||
600 | condition = decoded_line["where"] | ||
601 | if not isinstance(mark, str): | ||
602 | raise TypeError("Bad mark type %s" % type(mark)) | ||
603 | |||
604 | if not isinstance(condition, dict): | ||
605 | raise TypeError("Bad condition type %s" % type(condition)) | ||
606 | except KeyError as exc: | ||
607 | raise bb.asyncrpc.InvokeError( | ||
608 | "Input line is missing key '%s' " % exc | ||
609 | ) from exc | ||
610 | |||
611 | return json.dumps({"count": await self.db.gc_mark(mark, condition)}) | ||
612 | |||
613 | return await self._stream_handler(handler) | ||
614 | |||
615 | @permissions(DB_ADMIN_PERM) | ||
587 | async def handle_gc_sweep(self, request): | 616 | async def handle_gc_sweep(self, request): |
588 | mark = request["mark"] | 617 | mark = request["mark"] |
589 | 618 | ||