summaryrefslogtreecommitdiffstats
path: root/bitbake/bin
diff options
context:
space:
mode:
authorJoshua Watt <JPEWhacker@gmail.com>2024-02-18 15:59:46 -0700
committerRichard Purdie <richard.purdie@linuxfoundation.org>2024-02-19 11:58:12 +0000
commit1effd1014d9140905093efe25eeefedb28a10875 (patch)
treeb34fb1d26f020b361d22904695cab6b9a7c1ea50 /bitbake/bin
parent324c9fd666117afb0dd689eaa8551bb02d6a042b (diff)
downloadpoky-1effd1014d9140905093efe25eeefedb28a10875.tar.gz
bitbake: hashserv: Add Unihash Garbage Collection
Adds support for removing unused unihashes from the database. This is done using a "mark and sweep" style of garbage collection where a collection is started by marking which unihashes should be kept in the database, then performing a sweep to remove any unmarked hashes. (Bitbake rev: 433d4a075a1acfbd2a2913061739353a84bb01ed) Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/bin')
-rwxr-xr-xbitbake/bin/bitbake-hashclient35
1 files changed, 35 insertions, 0 deletions
diff --git a/bitbake/bin/bitbake-hashclient b/bitbake/bin/bitbake-hashclient
index 2cb6338666..f71b87404a 100755
--- a/bitbake/bin/bitbake-hashclient
+++ b/bitbake/bin/bitbake-hashclient
@@ -195,6 +195,28 @@ def main():
195 columns = client.get_db_query_columns() 195 columns = client.get_db_query_columns()
196 print("\n".join(sorted(columns))) 196 print("\n".join(sorted(columns)))
197 197
198 def handle_gc_status(args, client):
199 result = client.gc_status()
200 if not result["mark"]:
201 print("No Garbage collection in progress")
202 return 0
203
204 print("Current Mark: %s" % result["mark"])
205 print("Total hashes to keep: %d" % result["keep"])
206 print("Total hashes to remove: %s" % result["remove"])
207 return 0
208
209 def handle_gc_mark(args, client):
210 where = {k: v for k, v in args.where}
211 result = client.gc_mark(args.mark, where)
212 print("New hashes marked: %d" % result["count"])
213 return 0
214
215 def handle_gc_sweep(args, client):
216 result = client.gc_sweep(args.mark)
217 print("Removed %d rows" % result["count"])
218 return 0
219
198 parser = argparse.ArgumentParser(description='Hash Equivalence Client') 220 parser = argparse.ArgumentParser(description='Hash Equivalence Client')
199 parser.add_argument('--address', default=DEFAULT_ADDRESS, help='Server address (default "%(default)s")') 221 parser.add_argument('--address', default=DEFAULT_ADDRESS, help='Server address (default "%(default)s")')
200 parser.add_argument('--log', default='WARNING', help='Set logging level') 222 parser.add_argument('--log', default='WARNING', help='Set logging level')
@@ -274,6 +296,19 @@ def main():
274 db_query_columns_parser = subparsers.add_parser('get-db-query-columns', help="Show columns that can be used in database queries") 296 db_query_columns_parser = subparsers.add_parser('get-db-query-columns', help="Show columns that can be used in database queries")
275 db_query_columns_parser.set_defaults(func=handle_get_db_query_columns) 297 db_query_columns_parser.set_defaults(func=handle_get_db_query_columns)
276 298
299 gc_status_parser = subparsers.add_parser("gc-status", help="Show garbage collection status")
300 gc_status_parser.set_defaults(func=handle_gc_status)
301
302 gc_mark_parser = subparsers.add_parser('gc-mark', help="Mark hashes to be kept for garbage collection")
303 gc_mark_parser.add_argument("mark", help="Mark for this garbage collection operation")
304 gc_mark_parser.add_argument("--where", "-w", metavar="KEY VALUE", nargs=2, action="append", default=[],
305 help="Keep entries in table where KEY == VALUE")
306 gc_mark_parser.set_defaults(func=handle_gc_mark)
307
308 gc_sweep_parser = subparsers.add_parser('gc-sweep', help="Perform garbage collection and delete any entries that are not marked")
309 gc_sweep_parser.add_argument("mark", help="Mark for this garbage collection operation")
310 gc_sweep_parser.set_defaults(func=handle_gc_sweep)
311
277 args = parser.parse_args() 312 args = parser.parse_args()
278 313
279 logger = logging.getLogger('hashserv') 314 logger = logging.getLogger('hashserv')