docs: def Start(self,
              file_size=0,
              maximum_pending_files=1000,
              use_external_stores=False):
      """Initialize our state."""
      super(MultiGetFileLogic, self).Start()
  
      self.state.files_hashed = 0
      self.state.use_external_stores = use_external_stores
      self.state.file_size = file_size
      self.state.files_to_fetch = 0
      self.state.files_fetched = 0
      self.state.files_skipped = 0
  
      # Counter to batch up hash checking in the filestore
      self.state.files_hashed_since_check = 0
  
      # A dict of file trackers which are waiting to be checked by the file
      # store.  Keys are vfs urns and values are FileTrack instances.  Values are
      # copied to pending_files for download if not present in FileStore.
      self.state.pending_hashes = {}
  
      # A dict of file trackers currently being fetched. Keys are vfs urns and
      # values are FileTracker instances.
      self.state.pending_files = {}
  
      # The maximum number of files we are allowed to download concurrently.
      self.state.maximum_pending_files = maximum_pending_files
  
      # As pathspecs are added to the flow they are appended to this array. We
      # then simply pass their index in this array as a surrogate for the full
      # pathspec. This allows us to use integers to track pathspecs in dicts etc.
      self.state.indexed_pathspecs = []
      self.state.request_data_list = []
  
      # The index of the next pathspec to start. Pathspecs are added to
      # indexed_pathspecs and wait there until there are free trackers for
      # them. When the number of pending_files falls below the
      # "maximum_pending_files" count] = we increment this index and start of
      # downloading another pathspec.
      self.state.next_pathspec_to_start = 0
  
      # Number of blob hashes we have received but not yet scheduled for download.
      self.state.blob_hashes_pending = 0