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 <balaji_punnuru@cable.comcast.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Khem Raj 2017-02-08 22:41:50 -08:00 committed by Richard Purdie
parent 6c611d697f
commit b14e61d1bd
1 changed files with 12 additions and 0 deletions

View File

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