rearrange Retrieve: first step, shouldn't change order of execution
authorBrian Warner <warner@lothar.com>
Sun, 4 Sep 2011 03:21:18 +0000 (20:21 -0700)
committerBrian Warner <warner@lothar.com>
Fri, 9 Sep 2011 18:11:49 +0000 (11:11 -0700)
src/allmydata/mutable/retrieve.py

index f6c99d0ff10224fb1b956bc7791aca5fc9bf7d3a..25930c8e90705ba5533f372ac271d1e09a266cae 100644 (file)
@@ -222,11 +222,38 @@ class Retrieve:
             self._consumer.registerProducer(self, streaming=True)
 
         self._done_deferred = defer.Deferred()
+        self._offset = offset
+        self._read_length = size
+        self._setup_download()
+        self._setup_encoding_parameters()
+        self.log("starting download")
+        self._started_fetching = time.time()
+        d = self._add_active_peers()
+        # ...
+        # The download process beyond this is a state machine.
+        # _add_active_peers will select the peers that we want to use
+        # for the download, and then attempt to start downloading. After
+        # each segment, it will check for doneness, reacting to broken
+        # peers and corrupt shares as necessary. If it runs out of good
+        # peers before downloading all of the segments, _done_deferred
+        # will errback.  Otherwise, it will eventually callback with the
+        # contents of the mutable file.
+        return self._done_deferred
+
+    def _setup_download(self):
         self._started = time.time()
         self._status.set_status("Retrieving Shares")
 
-        self._offset = offset
-        self._read_length = size
+        # how many shares do we need?
+        (seqnum,
+         root_hash,
+         IV,
+         segsize,
+         datalength,
+         k,
+         N,
+         prefix,
+         offsets_tuple) = self.verinfo
 
         # first, which servers can we use?
         versionmap = self.servermap.make_versionmap()
@@ -248,7 +275,7 @@ class Retrieve:
                                        any_cache)
             reader.peerid = peerid
             self.readers[shnum] = reader
-
+        assert len(self.remaining_sharemap) >= k
 
         self.shares = {} # maps shnum to validated blocks
         self._active_readers = [] # list of active readers for this dl.
@@ -256,46 +283,12 @@ class Retrieve:
                                         # validated the prefix of
         self._block_hash_trees = {} # shnum => hashtree
 
-        # how many shares do we need?
-        (seqnum,
-         root_hash,
-         IV,
-         segsize,
-         datalength,
-         k,
-         N,
-         prefix,
-         offsets_tuple) = self.verinfo
-
-
         # We need one share hash tree for the entire file; its leaves
         # are the roots of the block hash trees for the shares that
         # comprise it, and its root is in the verinfo.
         self.share_hash_tree = hashtree.IncompleteHashTree(N)
         self.share_hash_tree.set_hashes({0: root_hash})
 
-        # This will set up both the segment decoder and the tail segment
-        # decoder, as well as a variety of other instance variables that
-        # the download process will use.
-        self._setup_encoding_parameters()
-        assert len(self.remaining_sharemap) >= k
-
-        self.log("starting download")
-        self._started_fetching = time.time()
-
-        self._add_active_peers()
-
-        # The download process beyond this is a state machine.
-        # _add_active_peers will select the peers that we want to use
-        # for the download, and then attempt to start downloading. After
-        # each segment, it will check for doneness, reacting to broken
-        # peers and corrupt shares as necessary. If it runs out of good
-        # peers before downloading all of the segments, _done_deferred
-        # will errback.  Otherwise, it will eventually callback with the
-        # contents of the mutable file.
-        return self._done_deferred
-
-
     def decode(self, blocks_and_salts, segnum):
         """
         I am a helper method that the mutable file update process uses
@@ -322,7 +315,7 @@ class Retrieve:
     def _setup_encoding_parameters(self):
         """
         I set up the encoding parameters, including k, n, the number
-        of segments associated with this file, and the segment decoder.
+        of segments associated with this file, and the segment decoders.
         """
         (seqnum,
          root_hash,