code: func (s *LDBStore) get(addr Address) (chunk Chunk, err error) {
  	if s.closed {
  		return nil, ErrDBClosed
  	}
  	proximity := s.po(addr)
  	index, found := s.tryAccessIdx(addr, proximity)
  	if found {
  		var data []byte
  		if s.getDataFunc != nil {
  			// if getDataFunc is defined, use it to retrieve the chunk data
  			log.Trace("ldbstore.get retrieve with getDataFunc", "key", addr)
  			data, err = s.getDataFunc(addr)
  			if err != nil {
  				return
  			}
  		} else {
  			// default DbStore functionality to retrieve chunk data
  			datakey := getDataKey(index.Idx, proximity)
  			data, err = s.db.Get(datakey)
  			log.Trace("ldbstore.get retrieve", "key", addr, "indexkey", index.Idx, "datakey", fmt.Sprintf("%x", datakey), "proximity", proximity)
  			if err != nil {
  				log.Trace("ldbstore.get chunk found but could not be accessed", "key", addr, "err", err)
  				s.deleteNow(index, getIndexKey(addr), s.po(addr))
  				if err == leveldb.ErrNotFound {
  					return nil, ErrChunkNotFound
  				}
  				return nil, err
  			}
  		}
  
  		return decodeData(addr, data)
  	} else {
  		err = ErrChunkNotFound
  	}
  
  	return
  }
docs: // TODO: To conform with other private methods of this object indices should not be updated