func Exist(dirpath string) bool { names, err := fileutil.ReadDir(dirpath) if err != nil { return false } return len(names) != 0 }
// identifyDataDirOrDie returns the type of the data dir. // Dies if the datadir is invalid. func identifyDataDirOrDie(dir string) dirType { names, err := fileutil.ReadDir(dir) if err != nil { if os.IsNotExist(err) { return dirEmpty } log.Fatalf("etcd: error listing data dir: %s", dir) } var m, p bool for _, name := range names { switch dirType(name) { case dirMember: m = true case dirProxy: p = true default: log.Printf("etcd: found invalid file/dir %s under data dir %s (Ignore this if you are upgrading etcd)", name, dir) } } if m && p { log.Fatal("etcd: invalid datadir. Both member and proxy directories exist.") } if m { return dirMember } if p { return dirProxy } return dirEmpty }
func DetectVersion(dirpath string) (WalVersion, error) { names, err := fileutil.ReadDir(dirpath) if err != nil { if os.IsNotExist(err) { err = nil } // Error reading the directory return WALNotExist, err } if len(names) == 0 { // Empty WAL directory return WALNotExist, nil } nameSet := types.NewUnsafeSet(names...) if nameSet.Contains("member") { ver, err := DetectVersion(path.Join(dirpath, "member")) if ver == WALv2_0 { return WALv2_0_1, nil } else if ver == WALv0_4 { // How in the blazes did it get there? return WALUnknown, nil } return ver, err } if nameSet.ContainsAll([]string{"snap", "wal"}) { // .../wal cannot be empty to exist. if Exist(path.Join(dirpath, "wal")) { return WALv2_0, nil } } if nameSet.ContainsAll([]string{"proxy"}) { return WALv2_0Proxy, nil } if nameSet.ContainsAll([]string{"snapshot", "conf", "log"}) { return WALv0_4, nil } if nameSet.ContainsAll([]string{"standby_info"}) { return WALv0_4, nil } return WALUnknown, nil }