mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
migrate/starter: fix v2 data dir checking
This commit is contained in:
parent
4b72095bd3
commit
3fd9136740
@ -30,11 +30,10 @@ import (
|
|||||||
"github.com/coreos/etcd/client"
|
"github.com/coreos/etcd/client"
|
||||||
"github.com/coreos/etcd/etcdmain"
|
"github.com/coreos/etcd/etcdmain"
|
||||||
"github.com/coreos/etcd/migrate"
|
"github.com/coreos/etcd/migrate"
|
||||||
"github.com/coreos/etcd/pkg/fileutil"
|
|
||||||
"github.com/coreos/etcd/pkg/flags"
|
"github.com/coreos/etcd/pkg/flags"
|
||||||
"github.com/coreos/etcd/pkg/osutil"
|
"github.com/coreos/etcd/pkg/osutil"
|
||||||
"github.com/coreos/etcd/pkg/types"
|
|
||||||
etcdversion "github.com/coreos/etcd/version"
|
etcdversion "github.com/coreos/etcd/version"
|
||||||
|
"github.com/coreos/etcd/wal"
|
||||||
|
|
||||||
"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
|
"github.com/coreos/etcd/Godeps/_workspace/src/golang.org/x/net/context"
|
||||||
)
|
)
|
||||||
@ -106,17 +105,17 @@ func checkInternalVersion(fs *flag.FlagSet) version {
|
|||||||
log.Fatalf("starter: please set --data-dir or ETCD_DATA_DIR for etcd")
|
log.Fatalf("starter: please set --data-dir or ETCD_DATA_DIR for etcd")
|
||||||
}
|
}
|
||||||
// check the data directory
|
// check the data directory
|
||||||
dataver, err := checkVersion(dataDir)
|
dataver, err := wal.DetectVersion(dataDir)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatalf("starter: failed to detect etcd version in %v: %v", dataDir, err)
|
log.Fatalf("starter: failed to detect etcd version in %v: %v", dataDir, err)
|
||||||
}
|
}
|
||||||
log.Printf("starter: detect etcd version %s in %s", dataver, dataDir)
|
log.Printf("starter: detect etcd version %s in %s", dataver, dataDir)
|
||||||
switch dataver {
|
switch dataver {
|
||||||
case v2_0:
|
case wal.WALv2_0:
|
||||||
return internalV2
|
return internalV2
|
||||||
case v2_0Proxy:
|
case wal.WALv2_0Proxy:
|
||||||
return internalV2Proxy
|
return internalV2Proxy
|
||||||
case v0_4:
|
case wal.WALv0_4:
|
||||||
standbyInfo, err := migrate.DecodeStandbyInfo4FromFile(standbyInfo4(dataDir))
|
standbyInfo, err := migrate.DecodeStandbyInfo4FromFile(standbyInfo4(dataDir))
|
||||||
if err != nil && !os.IsNotExist(err) {
|
if err != nil && !os.IsNotExist(err) {
|
||||||
log.Fatalf("starter: failed to decode standbyInfo in %v: %v", dataDir, err)
|
log.Fatalf("starter: failed to decode standbyInfo in %v: %v", dataDir, err)
|
||||||
@ -140,7 +139,7 @@ func checkInternalVersion(fs *flag.FlagSet) version {
|
|||||||
log.Fatalf("starter: failed to check start version in %v: %v", dataDir, err)
|
log.Fatalf("starter: failed to check start version in %v: %v", dataDir, err)
|
||||||
}
|
}
|
||||||
return ver
|
return ver
|
||||||
case empty:
|
case wal.WALNotExist:
|
||||||
discovery := fs.Lookup("discovery").Value.String()
|
discovery := fs.Lookup("discovery").Value.String()
|
||||||
dpeers, err := getPeersFromDiscoveryURL(discovery)
|
dpeers, err := getPeersFromDiscoveryURL(discovery)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -162,33 +161,6 @@ func checkInternalVersion(fs *flag.FlagSet) version {
|
|||||||
return internalUnknown
|
return internalUnknown
|
||||||
}
|
}
|
||||||
|
|
||||||
func checkVersion(dataDir string) (version, error) {
|
|
||||||
names, err := fileutil.ReadDir(dataDir)
|
|
||||||
if err != nil {
|
|
||||||
if os.IsNotExist(err) {
|
|
||||||
err = nil
|
|
||||||
}
|
|
||||||
return empty, err
|
|
||||||
}
|
|
||||||
if len(names) == 0 {
|
|
||||||
return empty, nil
|
|
||||||
}
|
|
||||||
nameSet := types.NewUnsafeSet(names...)
|
|
||||||
if nameSet.ContainsAll([]string{"member"}) {
|
|
||||||
return v2_0, nil
|
|
||||||
}
|
|
||||||
if nameSet.ContainsAll([]string{"proxy"}) {
|
|
||||||
return v2_0Proxy, nil
|
|
||||||
}
|
|
||||||
if nameSet.ContainsAll([]string{"snapshot", "conf", "log"}) {
|
|
||||||
return v0_4, nil
|
|
||||||
}
|
|
||||||
if nameSet.ContainsAll([]string{"standby_info"}) {
|
|
||||||
return v0_4, nil
|
|
||||||
}
|
|
||||||
return unknown, fmt.Errorf("failed to check version")
|
|
||||||
}
|
|
||||||
|
|
||||||
func checkInternalVersionByDataDir4(dataDir string) (version, error) {
|
func checkInternalVersionByDataDir4(dataDir string) (version, error) {
|
||||||
// check v0.4 snapshot
|
// check v0.4 snapshot
|
||||||
snap4, err := migrate.DecodeLatestSnapshot4FromDir(snapDir4(dataDir))
|
snap4, err := migrate.DecodeLatestSnapshot4FromDir(snapDir4(dataDir))
|
||||||
|
17
wal/util.go
17
wal/util.go
@ -28,11 +28,12 @@ import (
|
|||||||
type WalVersion string
|
type WalVersion string
|
||||||
|
|
||||||
const (
|
const (
|
||||||
WALUnknown WalVersion = "Unknown WAL"
|
WALUnknown WalVersion = "Unknown WAL"
|
||||||
WALNotExist WalVersion = "No WAL"
|
WALNotExist WalVersion = "No WAL"
|
||||||
WALv0_4 WalVersion = "0.4.x"
|
WALv0_4 WalVersion = "0.4.x"
|
||||||
WALv2_0 WalVersion = "2.0.0"
|
WALv2_0 WalVersion = "2.0.0"
|
||||||
WALv2_0_1 WalVersion = "2.0.1"
|
WALv2_0Proxy WalVersion = "2.0 proxy"
|
||||||
|
WALv2_0_1 WalVersion = "2.0.1"
|
||||||
)
|
)
|
||||||
|
|
||||||
func DetectVersion(dirpath string) (WalVersion, error) {
|
func DetectVersion(dirpath string) (WalVersion, error) {
|
||||||
@ -65,9 +66,15 @@ func DetectVersion(dirpath string) (WalVersion, error) {
|
|||||||
return WALv2_0, nil
|
return WALv2_0, nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if nameSet.ContainsAll([]string{"proxy"}) {
|
||||||
|
return WALv2_0Proxy, nil
|
||||||
|
}
|
||||||
if nameSet.ContainsAll([]string{"snapshot", "conf", "log"}) {
|
if nameSet.ContainsAll([]string{"snapshot", "conf", "log"}) {
|
||||||
return WALv0_4, nil
|
return WALv0_4, nil
|
||||||
}
|
}
|
||||||
|
if nameSet.ContainsAll([]string{"standby_info"}) {
|
||||||
|
return WALv0_4, nil
|
||||||
|
}
|
||||||
|
|
||||||
return WALUnknown, nil
|
return WALUnknown, nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user