mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
detect more cases of empty directories and actual errors
This commit is contained in:
parent
421fe128c3
commit
cf7690cb51
@ -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)
|
||||
}
|
||||
|
19
wal/util.go
19
wal/util.go
@ -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 {
|
||||
|
Loading…
x
Reference in New Issue
Block a user