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 | |
| 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>
| -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) |
