mirror of
https://github.com/tahoe-lafs/tahoe-lafs.git
synced 2025-01-31 08:25:35 +00:00
Ensure that verification proceeds and stops when appropriate.
The removed assertions are appropriate for a download that seeks to return plaintext to a caller; if we don't have at least k active remote shares, then we can't hope to do that. They're not appropriate for a verification operation; a user can try to verify a file that has fewer than k shares available, so that shouldn't be treated as an error. Instead, we proceed with fewer than k shares, and ensure that we terminate the download if we have no shares at all and we're verifying.
This commit is contained in:
parent
5e1e58d4a8
commit
1469b1b9f9
@ -505,7 +505,6 @@ class Retrieve:
|
|||||||
d.addCallback(self._try_to_validate_privkey, reader, reader.server)
|
d.addCallback(self._try_to_validate_privkey, reader, reader.server)
|
||||||
# XXX: don't just drop the Deferred. We need error-reporting
|
# XXX: don't just drop the Deferred. We need error-reporting
|
||||||
# but not flow-control here.
|
# but not flow-control here.
|
||||||
assert len(self._active_readers) >= self._required_shares
|
|
||||||
|
|
||||||
def _try_to_validate_prefix(self, prefix, reader):
|
def _try_to_validate_prefix(self, prefix, reader):
|
||||||
"""
|
"""
|
||||||
@ -602,11 +601,13 @@ class Retrieve:
|
|||||||
I download, validate, decode, decrypt, and assemble the segment
|
I download, validate, decode, decrypt, and assemble the segment
|
||||||
that this Retrieve is currently responsible for downloading.
|
that this Retrieve is currently responsible for downloading.
|
||||||
"""
|
"""
|
||||||
assert len(self._active_readers) >= self._required_shares
|
|
||||||
if self._current_segment > self._last_segment:
|
if self._current_segment > self._last_segment:
|
||||||
# No more segments to download, we're done.
|
# No more segments to download, we're done.
|
||||||
self.log("got plaintext, done")
|
self.log("got plaintext, done")
|
||||||
return self._done()
|
return self._done()
|
||||||
|
elif self._verify and len(self._active_readers) == 0:
|
||||||
|
self.log("no more good shares, no need to keep verifying")
|
||||||
|
return self._done()
|
||||||
self.log("on segment %d of %d" %
|
self.log("on segment %d of %d" %
|
||||||
(self._current_segment + 1, self._num_segments))
|
(self._current_segment + 1, self._num_segments))
|
||||||
d = self._process_segment(self._current_segment)
|
d = self._process_segment(self._current_segment)
|
||||||
@ -625,7 +626,6 @@ class Retrieve:
|
|||||||
|
|
||||||
# TODO: The old code uses a marker. Should this code do that
|
# TODO: The old code uses a marker. Should this code do that
|
||||||
# too? What did the Marker do?
|
# too? What did the Marker do?
|
||||||
assert len(self._active_readers) >= self._required_shares
|
|
||||||
|
|
||||||
# We need to ask each of our active readers for its block and
|
# We need to ask each of our active readers for its block and
|
||||||
# salt. We will then validate those. If validation is
|
# salt. We will then validate those. If validation is
|
||||||
|
Loading…
x
Reference in New Issue
Block a user