diff options
author | Joshua Watt <JPEWhacker@gmail.com> | 2023-11-03 08:26:27 -0600 |
---|---|---|
committer | Richard Purdie <richard.purdie@linuxfoundation.org> | 2023-11-09 17:33:02 +0000 |
commit | e31396eb1c7a224d0db5000e61209d0bdb8eb16c (patch) | |
tree | 52673e27c1b4acdbeb511a6b953cc9901e5ab179 /bitbake/lib/hashserv | |
parent | cfbb1d2cc01565610ba06a755e10425ff2076d9b (diff) | |
download | poky-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.py | 25 | ||||
-rw-r--r-- | bitbake/lib/hashserv/tests.py | 4 |
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) |