code: func (h *Holder) HasData() (bool, error) {
  	h.mu.Lock()
  	defer h.mu.Unlock()
  	if len(h.indexes) > 0 {
  		return true, nil
  	}
  	// Open path to read all index directories.
  	if _, err := os.Stat(h.Path); os.IsNotExist(err) {
  		return false, nil
  	} else if err != nil {
  		return false, errors.Wrap(err, "statting data dir")
  	}
  
  	f, err := os.Open(h.Path)
  	if err != nil {
  		return false, errors.Wrap(err, "opening data dir")
  	}
  	defer f.Close()
  
  	fis, err := f.Readdir(0)
  	if err != nil {
  		return false, errors.Wrap(err, "reading data dir")
  	}
  
  	for _, fi := range fis {
  		if !fi.IsDir() {
  			continue
  		}
  		return true, nil
  	}
  	return false, nil
  }
docs: // HasData returns true if Holder contains at least one index.
  // This is used to determine if the rebalancing of data is necessary
  // when a node joins the cluster.