summaryrefslogtreecommitdiffstats
path: root/bitbake/lib/hashserv
diff options
context:
space:
mode:
authorJoshua Watt <JPEWhacker@gmail.com>2023-11-03 08:26:27 -0600
committerRichard Purdie <richard.purdie@linuxfoundation.org>2023-11-09 17:33:02 +0000
commite31396eb1c7a224d0db5000e61209d0bdb8eb16c (patch)
tree52673e27c1b4acdbeb511a6b953cc9901e5ab179 /bitbake/lib/hashserv
parentcfbb1d2cc01565610ba06a755e10425ff2076d9b (diff)
downloadpoky-e31396eb1c7a224d0db5000e61209d0bdb8eb16c.tar.gz
bitbake: hashserv: Implement read-only version of "report" RPC
When the hash equivalence server is in read-only mode, it should still return a unihash for a given "report" call if there is one. (Bitbake rev: d0bbb98553f5f3451606bd5f089b36cfe4219dc2) Signed-off-by: Joshua Watt <JPEWhacker@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
Diffstat (limited to 'bitbake/lib/hashserv')
-rw-r--r--bitbake/lib/hashserv/server.py25
-rw-r--r--bitbake/lib/hashserv/tests.py4
2 files changed, 26 insertions, 3 deletions
diff --git a/bitbake/lib/hashserv/server.py b/bitbake/lib/hashserv/server.py
index 84cf4f2283..c691df7618 100644
--- a/bitbake/lib/hashserv/server.py
+++ b/bitbake/lib/hashserv/server.py
@@ -124,6 +124,7 @@ class ServerClient(bb.asyncrpc.AsyncServerConnection):
124 self.max_chunk = bb.asyncrpc.DEFAULT_MAX_CHUNK 124 self.max_chunk = bb.asyncrpc.DEFAULT_MAX_CHUNK
125 self.backfill_queue = backfill_queue 125 self.backfill_queue = backfill_queue
126 self.upstream = upstream 126 self.upstream = upstream
127 self.read_only = read_only
127 128
128 self.handlers.update( 129 self.handlers.update(
129 { 130 {
@@ -131,13 +132,15 @@ class ServerClient(bb.asyncrpc.AsyncServerConnection):
131 "get-outhash": self.handle_get_outhash, 132 "get-outhash": self.handle_get_outhash,
132 "get-stream": self.handle_get_stream, 133 "get-stream": self.handle_get_stream,
133 "get-stats": self.handle_get_stats, 134 "get-stats": self.handle_get_stats,
135 # Not always read-only, but internally checks if the server is
136 # read-only
137 "report": self.handle_report,
134 } 138 }
135 ) 139 )
136 140
137 if not read_only: 141 if not read_only:
138 self.handlers.update( 142 self.handlers.update(
139 { 143 {
140 "report": self.handle_report,
141 "report-equiv": self.handle_equivreport, 144 "report-equiv": self.handle_equivreport,
142 "reset-stats": self.handle_reset_stats, 145 "reset-stats": self.handle_reset_stats,
143 "backfill-wait": self.handle_backfill_wait, 146 "backfill-wait": self.handle_backfill_wait,
@@ -284,7 +287,27 @@ class ServerClient(bb.asyncrpc.AsyncServerConnection):
284 await self.socket.send("ok") 287 await self.socket.send("ok")
285 return self.NO_RESPONSE 288 return self.NO_RESPONSE
286 289
290 async def report_readonly(self, data):
291 method = data["method"]
292 outhash = data["outhash"]
293 taskhash = data["taskhash"]
294
295 info = await self.get_outhash(method, outhash, taskhash)
296 if info:
297 unihash = info["unihash"]
298 else:
299 unihash = data["unihash"]
300
301 return {
302 "taskhash": taskhash,
303 "method": method,
304 "unihash": unihash,
305 }
306
287 async def handle_report(self, data): 307 async def handle_report(self, data):
308 if self.read_only:
309 return await self.report_readonly(data)
310
288 outhash_data = { 311 outhash_data = {
289 "method": data["method"], 312 "method": data["method"],
290 "outhash": data["outhash"], 313 "outhash": data["outhash"],
diff --git a/bitbake/lib/hashserv/tests.py b/bitbake/lib/hashserv/tests.py
index 268b27006f..e9a361dc4b 100644
--- a/bitbake/lib/hashserv/tests.py
+++ b/bitbake/lib/hashserv/tests.py
@@ -387,8 +387,8 @@ class HashEquivalenceCommonTests(object):
387 outhash2 = '3c979c3db45c569f51ab7626a4651074be3a9d11a84b1db076f5b14f7d39db44' 387 outhash2 = '3c979c3db45c569f51ab7626a4651074be3a9d11a84b1db076f5b14f7d39db44'
388 unihash2 = '90e9bc1d1f094c51824adca7f8ea79a048d68824' 388 unihash2 = '90e9bc1d1f094c51824adca7f8ea79a048d68824'
389 389
390 with self.assertRaises(ConnectionError): 390 result = ro_client.report_unihash(taskhash2, self.METHOD, outhash2, unihash2)
391 ro_client.report_unihash(taskhash2, self.METHOD, outhash2, unihash2) 391 self.assertEqual(result['unihash'], unihash2)
392 392
393 # Ensure that the database was not modified 393 # Ensure that the database was not modified
394 self.assertClientGetHash(rw_client, taskhash2, None) 394 self.assertClientGetHash(rw_client, taskhash2, None)