| Message ID | 20260505160556.3688048-2-corentin.guillevic@smile.fr |
|---|---|
| State | New |
| Headers | show |
| Series | [v2] cooker: limit the execution of the hashequiv client/server ping | expand |
On Tue May 5, 2026 at 6:05 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_HASHSERVE_UPSTREAM_TIMEOUT variable. > > Signed-off-by: Corentin Guillevic <corentin.guillevic@smile.fr> > --- Hi Corentin, Thanks for the new version. > --- 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(int(self.data.getVar("BB_HASHSERVE_UPSTREAM_TIMEOUT")) or 10) I believe this is not sufficient when BB_HASHSERVE_UPSTREAM_TIMEOUT is not defined: TypeError: int() argument must be a string, a bytes-like object or a real number, not 'NoneType' https://autobuilder.yoctoproject.org/valkyrie/#/builders/80/builds/3542 Maybe this is just a parenthesis issue? client.ping(int(self.data.getVar("BB_HASHSERVE_UPSTREAM_TIMEOUT") or 10)) Thanks, Mathieu
diff --git a/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.rst b/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.rst index 9824b58ef..cce03bc0c 100644 --- a/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.rst +++ b/doc/bitbake-user-manual/bitbake-user-manual-ref-variables.rst @@ -511,6 +511,17 @@ overview of their function and contents. BB_HASHSERVE_UPSTREAM = "hashserv.yoctoproject.org:8686" + :term:`BB_HASHSERVE_UPSTREAM_TIMEOUT` + Specifies the duration (in seconds) for which BitBake waits for the first + response from the upstream Hash Equivalence server (specified by + :term:`BB_HASHSERVE_UPSTREAM`). + + This variable prevents BitBake from waiting too long for an unavailable server. + If the time expires, the upstream Hash Equivalence server will be skipped for + the build. + + The default value is "10" (seconds). + :term:`BB_INVALIDCONF` Used in combination with the ``ConfigParsed`` event to trigger re-parsing the base metadata (i.e. all the recipes). The diff --git a/lib/bb/asyncrpc/client.py b/lib/bb/asyncrpc/client.py index 17b72033b..5e2505494 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=None): + 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..c7ced1e37 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(int(self.data.getVar("BB_HASHSERVE_UPSTREAM_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