diff options
| author | Alexandre Marques <c137.marques@gmail.com> | 2025-03-12 11:22:04 +0000 |
|---|---|---|
| committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2025-03-13 16:52:44 +0000 |
| commit | a4f833698289da86138fd4a401331baa563b5eed (patch) | |
| tree | 3bcdd9688aaa9dbec6d2002a351196bbcb4d58b0 /bitbake/bin | |
| parent | cb9bff9eac3670253076d5d09c6893e372be40a8 (diff) | |
| download | poky-a4f833698289da86138fd4a401331baa563b5eed.tar.gz | |
bitbake: hashserv: Add `gc-mark-stream` command for batch hash marking
Implements the `gc-mark-stream` command to allow for marking equivalence entries
in batch, by making use of stream mode communication to the server.
The aim of this is to improve efficiency by reducing the impact of latency when
marking a high volume of hash entries.
Example usage of the new `gc-mark-stream` command:
```
$ cat << HASHES | \
./bin/bitbake-hashclient --address "ws://localhost:8688/ws" gc-mark-stream "alive"
unihash f37918cc02eb5a520b1aff86faacbc0a38124646
unihash af36b199320e611fbb16f1f277d3ee1d619ca58b
taskhash a1117c1f5a7c9ab2f5a39cc6fe5e6152169d09c0 method oe.sstatesig.OEOuthashBasic
HASHES
```
(Bitbake rev: c84715f28cd36666ea07a179d91b8c32ea0df8e7)
Signed-off-by: Alexander Marques <c137.marques@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/bin')
| -rwxr-xr-x | bitbake/bin/bitbake-hashclient | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/bitbake/bin/bitbake-hashclient b/bitbake/bin/bitbake-hashclient index a50701a88b..b8755c5797 100755 --- a/bitbake/bin/bitbake-hashclient +++ b/bitbake/bin/bitbake-hashclient | |||
| @@ -227,6 +227,27 @@ def main(): | |||
| 227 | print("New hashes marked: %d" % result["count"]) | 227 | print("New hashes marked: %d" % result["count"]) |
| 228 | return 0 | 228 | return 0 |
| 229 | 229 | ||
| 230 | def handle_gc_mark_stream(args, client): | ||
| 231 | stdin = (l.strip() for l in sys.stdin) | ||
| 232 | marked_hashes = 0 | ||
| 233 | |||
| 234 | try: | ||
| 235 | result = client.gc_mark_stream(args.mark, stdin) | ||
| 236 | marked_hashes = result["count"] | ||
| 237 | except ConnectionError: | ||
| 238 | logger.warning( | ||
| 239 | "Server doesn't seem to support `gc-mark-stream`. Sending " | ||
| 240 | "hashes sequentially using `gc-mark` API." | ||
| 241 | ) | ||
| 242 | for line in stdin: | ||
| 243 | pairs = line.split() | ||
| 244 | condition = dict(zip(pairs[::2], pairs[1::2])) | ||
| 245 | result = client.gc_mark(args.mark, condition) | ||
| 246 | marked_hashes += result["count"] | ||
| 247 | |||
| 248 | print("New hashes marked: %d" % marked_hashes) | ||
| 249 | return 0 | ||
| 250 | |||
| 230 | def handle_gc_sweep(args, client): | 251 | def handle_gc_sweep(args, client): |
| 231 | result = client.gc_sweep(args.mark) | 252 | result = client.gc_sweep(args.mark) |
| 232 | print("Removed %d rows" % result["count"]) | 253 | print("Removed %d rows" % result["count"]) |
| @@ -366,6 +387,16 @@ def main(): | |||
| 366 | help="Keep entries in table where KEY == VALUE") | 387 | help="Keep entries in table where KEY == VALUE") |
| 367 | gc_mark_parser.set_defaults(func=handle_gc_mark) | 388 | gc_mark_parser.set_defaults(func=handle_gc_mark) |
| 368 | 389 | ||
| 390 | gc_mark_parser_stream = subparsers.add_parser( | ||
| 391 | 'gc-mark-stream', | ||
| 392 | help=( | ||
| 393 | "Mark multiple hashes to be retained for garbage collection. Input should be provided via stdin, " | ||
| 394 | "with each line formatted as key-value pairs separated by spaces, for example 'column1 foo column2 bar'." | ||
| 395 | ) | ||
| 396 | ) | ||
| 397 | gc_mark_parser_stream.add_argument("mark", help="Mark for this garbage collection operation") | ||
| 398 | gc_mark_parser_stream.set_defaults(func=handle_gc_mark_stream) | ||
| 399 | |||
| 369 | gc_sweep_parser = subparsers.add_parser('gc-sweep', help="Perform garbage collection and delete any entries that are not marked") | 400 | gc_sweep_parser = subparsers.add_parser('gc-sweep', help="Perform garbage collection and delete any entries that are not marked") |
| 370 | gc_sweep_parser.add_argument("mark", help="Mark for this garbage collection operation") | 401 | gc_sweep_parser.add_argument("mark", help="Mark for this garbage collection operation") |
| 371 | gc_sweep_parser.set_defaults(func=handle_gc_sweep) | 402 | gc_sweep_parser.set_defaults(func=handle_gc_sweep) |
