[bitbake-devel] [PATCH 1/1] fetcher2: retry mirror if upstream checksum mismatch
Yu Ke
ke.yu at intel.com
Fri Jul 8 02:41:26 UTC 2011
Ping. any comment on this one?
on 2011-7-5 21:11, Yu Ke wrote:
> This patch is for [YOCTO #1085] fix.
>
> If the upstream fails a checksum, retry from the MIRROR before giving up.
> This will add more robust fetching if an upstream serves a bad file or webpage.
>
> fetching of distcc prior to the move from samba -> googlecode is a good example
> of this.
>
> Signed-off-by: Yu Ke<ke.yu at intel.com>
> ---
> bitbake/lib/bb/fetch2/__init__.py | 27 ++++++++++++++++-----------
> 1 files changed, 16 insertions(+), 11 deletions(-)
>
> diff --git a/bitbake/lib/bb/fetch2/__init__.py b/bitbake/lib/bb/fetch2/__init__.py
> index e9a64c5..bb9dbbe 100644
> --- a/bitbake/lib/bb/fetch2/__init__.py
> +++ b/bitbake/lib/bb/fetch2/__init__.py
> @@ -278,6 +278,15 @@ def verify_checksum(u, ud, d):
> if BB_STRICT_CHECKSUM = "1" then return false as unmatched, otherwise return true as
> matched
> """
> + # Only check the checksums if we've not seen this item before
> + if os.path.exists(ud.donestamp):
> + # Touch the done stamp file to show active use of the download
> + try:
> + os.utime(ud.donestamp, None)
> + except:
> + # Errors aren't fatal here
> + pass
> + return
>
> if not ud.type in ["http", "https", "ftp", "ftps"]:
> return
> @@ -300,6 +309,9 @@ def verify_checksum(u, ud, d):
> if ud.sha256_expected != sha256data:
> raise SHA256SumError(ud.localpath, ud.sha256_expected, sha256data, u)
>
> + # Create the stamp to avoid duplicate checking
> + open(ud.donestamp, 'w').close()
> +
> def subprocess_setup():
> import signal
> # Python installs a SIGPIPE handler by default. This is usually not what
> @@ -932,6 +944,9 @@ class Fetch(object):
> if hasattr(m, "build_mirror_data"):
> m.build_mirror_data(u, ud, self.d)
> localpath = ud.localpath
> + # early checksum verify, so that if checksum mismatched,
> + # fetcher still have chance to fetch from mirror
> + verify_checksum(u, ud, self.d)
>
> except bb.fetch2.NetworkAccess:
> raise
> @@ -948,17 +963,7 @@ class Fetch(object):
> if not localpath or ((not os.path.exists(localpath)) and localpath.find("*") == -1):
> raise FetchError("Unable to fetch URL %s from any source." % u, u)
>
> - if os.path.exists(ud.donestamp):
> - # Touch the done stamp file to show active use of the download
> - try:
> - os.utime(ud.donestamp, None)
> - except:
> - # Errors aren't fatal here
> - pass
> - else:
> - # Only check the checksums if we've not seen this item before, then create the stamp
> - verify_checksum(u, ud, self.d)
> - open(ud.donestamp, 'w').close()
> + verify_checksum(u, ud, self.d)
>
> finally:
> bb.utils.unlockfile(lf)
More information about the bitbake-devel
mailing list