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 n raft.Node
|
||||||
var s *raft.MemoryStorage
|
var s *raft.MemoryStorage
|
||||||
var id types.ID
|
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 {
|
if walVersion == wal.WALUnknown {
|
||||||
return nil, fmt.Errorf("unknown wal version in data dir %s", cfg.DataDir)
|
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 (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
"log"
|
||||||
|
"os"
|
||||||
"path"
|
"path"
|
||||||
|
|
||||||
"github.com/coreos/etcd/pkg/fileutil"
|
"github.com/coreos/etcd/pkg/fileutil"
|
||||||
@ -35,23 +36,31 @@ const (
|
|||||||
WALv0_5 WalVersion = "0.5.x"
|
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)
|
names, err := fileutil.ReadDir(dirpath)
|
||||||
if err != nil {
|
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...)
|
nameSet := types.NewUnsafeSet(names...)
|
||||||
if nameSet.ContainsAll([]string{"snap", "wal"}) {
|
if nameSet.ContainsAll([]string{"snap", "wal"}) {
|
||||||
// .../wal cannot be empty to exist.
|
// .../wal cannot be empty to exist.
|
||||||
if Exist(path.Join(dirpath, "wal")) {
|
if Exist(path.Join(dirpath, "wal")) {
|
||||||
return WALv0_5
|
return WALv0_5, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if nameSet.ContainsAll([]string{"snapshot", "conf", "log"}) {
|
if nameSet.ContainsAll([]string{"snapshot", "conf", "log"}) {
|
||||||
return WALv0_4
|
return WALv0_4, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
return WALUnknown
|
return WALUnknown, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func Exist(dirpath string) bool {
|
func Exist(dirpath string) bool {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user