From ad58f8b6932ce25892fa3d04b3f4026c3f6c4d06 Mon Sep 17 00:00:00 2001 From: Zooko O'Whielacronx Date: Sun, 21 Dec 2008 17:41:30 -0700 Subject: [PATCH] immutable: invent download.BadOrMissingHashError which is raised if either hashtree.BadHashError, hashtree.NotEnoughHashesError, and which is a subclass of IntegrityCheckReject --- src/allmydata/immutable/download.py | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/src/allmydata/immutable/download.py b/src/allmydata/immutable/download.py index 2f4d8c3a..c6390beb 100644 --- a/src/allmydata/immutable/download.py +++ b/src/allmydata/immutable/download.py @@ -15,16 +15,18 @@ from allmydata.interfaces import IDownloadTarget, IDownloader, IFileURI, IVerifi from allmydata.immutable import layout from pycryptopp.cipher.aes import AES -class IntegrityCheckError(Exception): +class IntegrityCheckReject(Exception): pass -class BadURIExtensionHashValue(IntegrityCheckError): +class BadURIExtensionHashValue(IntegrityCheckReject): pass -class BadURIExtension(IntegrityCheckError): +class BadURIExtension(IntegrityCheckReject): pass class UnsupportedErasureCodec(BadURIExtension): pass -class BadCrypttextHashValue(IntegrityCheckError): +class BadCrypttextHashValue(IntegrityCheckReject): + pass +class BadOrMissingShareHash(IntegrityCheckReject): pass class DownloadStopped(Exception): @@ -157,7 +159,7 @@ class ValidatedCrypttextHashTreeProxy: ct_hashes = dict(list(enumerate(proposal))) try: self._crypttext_hash_tree.set_hashes(ct_hashes) - except hashtree.BadHashError: + except (hashtree.BadHashError, hashtree.NotEnoughHashesError), le: if self._fetch_failures is not None: self._fetch_failures["crypttext_hash_tree"] += 1 raise @@ -410,7 +412,7 @@ class ValidatedReadBucketProxy(log.PrefixingLogMixin): bh[0] = self._share_hash self.block_hash_tree.set_hashes(bh, {blocknum: blockhash}) - except (hashtree.BadHashError, hashtree.NotEnoughHashesError): + except (hashtree.BadHashError, hashtree.NotEnoughHashesError), le: # log.WEIRD: indicates undetected disk/network error, or more # likely a programming error self.log("hash failure in block=%d, shnum=%d on %s" % @@ -442,7 +444,7 @@ class ValidatedReadBucketProxy(log.PrefixingLogMixin): for i,h in enumerate(blockhashes): lines.append("%3d: %s" % (i, base32.b2a_or_none(h))) log.msg(" blockhashes:\n" + "\n".join(lines) + "\n") - raise + raise BadOrMissingShareHash(le) # If we made it here, the block is good. If the hash trees didn't # like what they saw, they would have raised a BadHashError, causing -- 2.45.2