summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKhem Raj <raj.khem@gmail.com>2017-02-08 22:41:50 -0800
committerRichard Purdie <richard.purdie@linuxfoundation.org>2017-02-19 06:28:41 -0800
commit5a53e7d7b017769a6eb0f0a6335735a1fe51a5ec (patch)
tree21b80b123224e0ed80d593b4d17f50dd42901b85
parent4df59b027c02ef39d72476251ccd3fd62fc20bf6 (diff)
downloadbitbake-contrib-5a53e7d7b017769a6eb0f0a6335735a1fe51a5ec.zip
bitbake-contrib-5a53e7d7b017769a6eb0f0a6335735a1fe51a5ec.tar.gz
bitbake-contrib-5a53e7d7b017769a6eb0f0a6335735a1fe51a5ec.tar.bz2
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. Signed-off-by: Balaji Punnuru <balaji_punnuru@cable.comcast.com> Signed-off-by: Khem Raj <raj.khem@gmail.com> Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
-rw-r--r--lib/bb/fetch2/__init__.py12
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/bb/fetch2/__init__.py b/lib/bb/fetch2/__init__.py
index 8dd276f..70387f5 100644
--- a/lib/bb/fetch2/__init__.py
+++ b/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)