offloaded: when uploading a file that failed to upload before, ask for the last byte...
authorBrian Warner <warner@allmydata.com>
Tue, 29 Jan 2008 02:05:43 +0000 (19:05 -0700)
committerBrian Warner <warner@allmydata.com>
Tue, 29 Jan 2008 02:05:43 +0000 (19:05 -0700)
src/allmydata/offloaded.py

index 7549a4e75ac82d1f21cb3ca5a29c820bd0318604..6cb9f98a9da8dffa87dc2c3ca74a7819c582a03a 100644 (file)
@@ -164,7 +164,16 @@ class CHKCiphertextFetcher(AskUntilSuccessMixin):
         if os.path.exists(self._encoding_file):
             self.log("ciphertext already present, bypassing fetch",
                      level=log.UNUSUAL)
-            return self._done2()
+            # we'll still need the plaintext hashes (when
+            # LocalCiphertextReader.get_plaintext_hashtree_leaves() is
+            # called), and currently the easiest way to get them is to ask
+            # the sender for the last byte of ciphertext. That will provoke
+            # them into reading and hashing (but not sending) everything
+            # else.
+            have = os.stat(self._encoding_file)[stat.ST_SIZE]
+            d = self.call("read_encrypted", have-1, 1)
+            d.addCallback(lambda ignored: self._done2())
+            return
 
         # first, find out how large the file is going to be
         d = self.call("get_size")
@@ -256,6 +265,7 @@ class CHKCiphertextFetcher(AskUntilSuccessMixin):
         return self._done2()
 
     def _done2(self):
+        self.log("done2", level=log.NOISY)
         self._readers = []
         self._done_observers.fire(None)