docs: def _GetChunkForReading(self, chunk):
      """Retrieve the relevant blob from the AFF4 data store or cache."""
      offset = chunk * self._HASH_SIZE
      self.index.seek(offset)
  
      chunk_name = self.index.read(self._HASH_SIZE)
  
      try:
        return self.chunk_cache.Get(chunk_name)
      except KeyError:
        pass
  
      # We don't have this chunk already cached. The most common read
      # access pattern is contiguous reading so since we have to go to
      # the data store already, we read ahead to reduce round trips.
      self.index.seek(offset)
      readahead = []
  
      for _ in range(self._READAHEAD):
        name = self.index.read(self._HASH_SIZE)
        if name and name not in self.chunk_cache:
          readahead.append(rdf_objects.BlobID.FromBytes(name))
  
      self._ReadChunks(readahead)
      try:
        return self.chunk_cache.Get(chunk_name)
      except KeyError:
        raise aff4.ChunkNotFoundError("Cannot open chunk %s" % chunk)