detect more cases of empty directories and actual errors

This commit is contained in:
Barak Michener 2014-12-11 13:37:32 -05:00
parent 421fe128c3
commit cf7690cb51
2 changed files with 18 additions and 6 deletions

View File

@ -210,7 +210,10 @@ func NewServer(cfg *ServerConfig) (*EtcdServer, error) {
var n raft.Node
var s *raft.MemoryStorage
var id types.ID
walVersion := wal.DetectVersion(cfg.DataDir)
walVersion, err := wal.DetectVersion(cfg.DataDir)
if err != nil {
return nil, err
}
if walVersion == wal.WALUnknown {
return nil, fmt.Errorf("unknown wal version in data dir %s", cfg.DataDir)
}

View File

@ -19,6 +19,7 @@ package wal
import (
"fmt"
"log"
"os"
"path"
"github.com/coreos/etcd/pkg/fileutil"
@ -35,23 +36,31 @@ const (
WALv0_5 WalVersion = "0.5.x"
)
func DetectVersion(dirpath string) WalVersion {
func DetectVersion(dirpath string) (WalVersion, error) {
if _, err := os.Stat(dirpath); os.IsNotExist(err) {
return WALNotExist, nil
}
names, err := fileutil.ReadDir(dirpath)
if err != nil {
return WALNotExist
// Error reading the directory
return WALNotExist, err
}
if len(names) == 0 {
// Empty WAL directory
return WALNotExist, nil
}
nameSet := types.NewUnsafeSet(names...)
if nameSet.ContainsAll([]string{"snap", "wal"}) {
// .../wal cannot be empty to exist.
if Exist(path.Join(dirpath, "wal")) {
return WALv0_5
return WALv0_5, nil
}
}
if nameSet.ContainsAll([]string{"snapshot", "conf", "log"}) {
return WALv0_4
return WALv0_4, nil
}
return WALUnknown
return WALUnknown, nil
}
func Exist(dirpath string) bool {