From b14e61d1bd17d2976cc25fc78ccaad1c0659dd50 Mon Sep 17 00:00:00 2001 From: Khem Raj Date: Wed, 8 Feb 2017 22:41:50 -0800 Subject: bitbake: fetch2: Add NFS Stale file exception handling - In some cases the file descriptor is held by nfs client and none of os.path.* is catching that, it could mean that error is not doled out because client has cached the stat info. In this case we are out of luck. Needed to catch IOError, which would be causing the Stale error. - In download method, update_stamp is invoked md5sum validation which is found to be throwing Stale errors. - Added error handling to fix the stale errors. (Bitbake rev: 5a53e7d7b017769a6eb0f0a6335735a1fe51a5ec) Signed-off-by: Balaji Punnuru Signed-off-by: Khem Raj Signed-off-by: Richard Purdie --- bitbake/lib/bb/fetch2/__init__.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py index 8dd276fa72..70387f52db 100644 --- a/bitbake/lib/bb/fetch2/__init__.py +++ b/bitbake/lib/bb/fetch2/__init__.py @@ -35,6 +35,7 @@ import operator import collections import subprocess import pickle +import errno import bb.persist_data, bb.utils import bb.checksum from bb import data @@ -998,6 +999,12 @@ def try_mirror_url(fetch, origud, ud, ld, check = False): except bb.fetch2.NetworkAccess: raise + except IOError as e: + if e.errno in [os.errno.ESTALE]: + logger.warn("Stale Error Observed %s." % ud.url) + return False + raise + except bb.fetch2.BBFetchException as e: if isinstance(e, ChecksumError): logger.warning("Mirror checksum failure for url %s (original url: %s)\nCleaning and trying again." % (ud.url, origud.url)) @@ -1646,6 +1653,11 @@ class Fetch(object): update_stamp(ud, self.d) + except IOError as e: + if e.errno in [os.errno.ESTALE]: + logger.error("Stale Error Observed %s." % u) + raise ChecksumError("Stale Error Detected") + except BBFetchException as e: if isinstance(e, ChecksumError): logger.error("Checksum failure fetching %s" % u) -- cgit 1.2.3-korg