code: func NewDirReader(dir string, pool chunkenc.Pool) (*Reader, error) {
  	files, err := sequenceFiles(dir)
  	if err != nil {
  		return nil, err
  	}
  	if pool == nil {
  		pool = chunkenc.NewPool()
  	}
  
  	var (
  		bs   []ByteSlice
  		cs   []io.Closer
  		merr tsdb_errors.MultiError
  	)
  	for _, fn := range files {
  		f, err := fileutil.OpenMmapFile(fn)
  		if err != nil {
  			merr.Add(errors.Wrap(err, "mmap files"))
  			merr.Add(closeAll(cs))
  			return nil, merr
  		}
  		cs = append(cs, f)
  		bs = append(bs, realByteSlice(f.Bytes()))
  	}
  
  	reader, err := newReader(bs, cs, pool)
  	if err != nil {
  		merr.Add(err)
  		merr.Add(closeAll(cs))
  		return nil, merr
  	}
  	return reader, nil
  }
docs: // NewDirReader returns a new Reader against sequentially numbered files in the
  // given directory.