| Message ID | 20260423102950.697501-2-corentin.guillevic@smile.fr |
|---|---|
| State | New |
| Headers | show |
| Series | cooker: limit the execution of the hashequiv client/server ping | expand |
Hi, On Thu Apr 23, 2026 at 12:29 PM CEST, Corentin Guillevic via lists.openembedded.org wrote: > From: Corentin Guillevic <corentin.guillevic@smile.fr> > > The ping method is used to test the connection to the hash equivalence server. > However, if the server is unavailable, the bitbake server has to wait several > minutes for the system to terminate. > > While waiting for a response from the hash server, the bitbake server does not > provide any feedback to the bitbake client. The latter then closes the link and > fails with the error: > > Timeout while waiting for a reply from the bitbake server (60s at 09:50:15.377337) > > Adding a timeout to the ping step allows quicker action when a remote server is > unavailable, and prevents disconnection of the client due to timeout. > The default timeout is 10 seconds, but this can be set using the > BB_HASHSERVER_TIMEOUT variable. Can you please document this new variable in doc/bitbake-user-manual/bitbake-user-manual-ref-variables.rst in the same commit? Thanks, Antonin
diff --git a/lib/bb/asyncrpc/client.py b/lib/bb/asyncrpc/client.py index 17b72033b..7ef76c90c 100644 --- a/lib/bb/asyncrpc/client.py +++ b/lib/bb/asyncrpc/client.py @@ -199,8 +199,8 @@ class AsyncClient(object): self.check_invoke_error(result) return result - async def ping(self): - return await self.invoke({"ping": {}}) + async def ping(self, timeout): + return await asyncio.wait_for(self.invoke({"ping": {}}), timeout) async def __aenter__(self): return self diff --git a/lib/bb/cooker.py b/lib/bb/cooker.py index 4b6ba3196..0bc9b7aec 100644 --- a/lib/bb/cooker.py +++ b/lib/bb/cooker.py @@ -342,7 +342,7 @@ according to https://docs.yoctoproject.org/dev-manual/hashequivserver.html""".fo if upstream: try: with hashserv.create_client(upstream) as client: - client.ping() + client.ping(self.data.getVar("BB_HASHSERVER_TIMEOUT") or 10) except ImportError as e: bb.fatal(""""Unable to use hash equivalence server at '%s' due to missing or incorrect python module: %s @@ -352,7 +352,7 @@ Please install the needed module on the build host, or use an environment contai - or set up pip venv You can also remove the BB_HASHSERVE_UPSTREAM setting, but this may result in significantly longer build times as bitbake will be unable to reuse prebuilt sstate artefacts.""" % (upstream, repr(e))) - except ConnectionError as e: + except (ConnectionError, TimeoutError) as e: bb.warn("Unable to connect to hash equivalence server at '%s', please correct or remove BB_HASHSERVE_UPSTREAM:\n%s" % (upstream, repr(e))) upstream = None