diff --git a/etcdserver/server.go b/etcdserver/server.go index 0e57f90a3..a999f660e 100644 --- a/etcdserver/server.go +++ b/etcdserver/server.go @@ -226,15 +226,6 @@ func NewServer(cfg *ServerConfig) (srv *EtcdServer, err error) { return nil, fmt.Errorf("cannot access data directory: %v", terr) } - // Run the migrations. - dataVer, err := version.DetectDataDir(cfg.DataDir) - if err != nil { - return nil, err - } - if err = upgradeDataDir(cfg.DataDir, cfg.Name, dataVer); err != nil { - return nil, err - } - haveWAL := wal.Exist(cfg.WALDir()) if err = fileutil.TouchDirAll(cfg.SnapDir()); err != nil { diff --git a/etcdserver/storage.go b/etcdserver/storage.go index 6453a1794..693618fbd 100644 --- a/etcdserver/storage.go +++ b/etcdserver/storage.go @@ -16,16 +16,12 @@ package etcdserver import ( "io" - "os" - "path" pb "github.com/coreos/etcd/etcdserver/etcdserverpb" - "github.com/coreos/etcd/pkg/fileutil" "github.com/coreos/etcd/pkg/pbutil" "github.com/coreos/etcd/pkg/types" "github.com/coreos/etcd/raft/raftpb" "github.com/coreos/etcd/snap" - "github.com/coreos/etcd/version" "github.com/coreos/etcd/wal" "github.com/coreos/etcd/wal/walpb" ) @@ -103,41 +99,3 @@ func readWAL(waldir string, snap walpb.Snapshot) (w *wal.WAL, id, cid types.ID, cid = types.ID(metadata.ClusterID) return } - -// upgradeDataDir converts an older version of the etcdServer data to the newest version. -// It must ensure that, after upgrading, the most recent version is present. -func upgradeDataDir(baseDataDir string, name string, ver version.DataDirVersion) error { - switch ver { - case version.DataDir2_0: - err := makeMemberDir(baseDataDir) - if err != nil { - return err - } - fallthrough - case version.DataDir2_0_1: - fallthrough - default: - } - return nil -} - -func makeMemberDir(dir string) error { - membdir := path.Join(dir, "member") - _, err := os.Stat(membdir) - switch { - case err == nil: - return nil - case !os.IsNotExist(err): - return err - } - if err := fileutil.CreateDirAll(membdir); err != nil { - return err - } - names := []string{"snap", "wal"} - for _, name := range names { - if err := os.Rename(path.Join(dir, name), path.Join(membdir, name)); err != nil { - return err - } - } - return nil -} diff --git a/version/version.go b/version/version.go index 6f4feacf3..ead11c335 100644 --- a/version/version.go +++ b/version/version.go @@ -18,12 +18,7 @@ package version import ( "fmt" - "os" - "path" "strings" - - "github.com/coreos/etcd/pkg/fileutil" - "github.com/coreos/etcd/pkg/types" ) var ( @@ -35,52 +30,12 @@ var ( GitSHA = "Not provided (use ./build instead of go build)" ) -// DataDirVersion is an enum for versions of etcd logs. -type DataDirVersion string - -const ( - DataDirUnknown DataDirVersion = "Unknown WAL" - DataDir2_0 DataDirVersion = "2.0.0" - DataDir2_0Proxy DataDirVersion = "2.0 proxy" - DataDir2_0_1 DataDirVersion = "2.0.1" -) - type Versions struct { Server string `json:"etcdserver"` Cluster string `json:"etcdcluster"` // TODO: raft state machine version } -func DetectDataDir(dirpath string) (DataDirVersion, error) { - names, err := fileutil.ReadDir(dirpath) - if err != nil { - if os.IsNotExist(err) { - err = nil - } - // Error reading the directory - return DataDirUnknown, err - } - nameSet := types.NewUnsafeSet(names...) - if nameSet.Contains("member") { - ver, err := DetectDataDir(path.Join(dirpath, "member")) - if ver == DataDir2_0 { - return DataDir2_0_1, nil - } - return ver, err - } - if nameSet.ContainsAll([]string{"snap", "wal"}) { - // .../wal cannot be empty to exist. - walnames, err := fileutil.ReadDir(path.Join(dirpath, "wal")) - if err == nil && len(walnames) > 0 { - return DataDir2_0, nil - } - } - if nameSet.ContainsAll([]string{"proxy"}) { - return DataDir2_0Proxy, nil - } - return DataDirUnknown, nil -} - // Cluster only keeps the major.minor. func Cluster(v string) string { vs := strings.Split(v, ".") diff --git a/version/version_test.go b/version/version_test.go deleted file mode 100644 index 336d9a99e..000000000 --- a/version/version_test.go +++ /dev/null @@ -1,67 +0,0 @@ -// Copyright 2015 The etcd Authors -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -package version - -import ( - "io/ioutil" - "os" - "path" - "strings" - "testing" -) - -func TestDetectDataDir(t *testing.T) { - tests := []struct { - names []string - wver DataDirVersion - }{ - {[]string{"member/", "member/wal/", "member/wal/1", "member/snap/"}, DataDir2_0_1}, - {[]string{"snap/", "wal/", "wal/1"}, DataDir2_0}, - {[]string{"weird"}, DataDirUnknown}, - {[]string{"snap/", "wal/"}, DataDirUnknown}, - } - for i, tt := range tests { - p := mustMakeDir(t, tt.names...) - ver, err := DetectDataDir(p) - if ver != tt.wver { - t.Errorf("#%d: version = %s, want %s", i, ver, tt.wver) - } - if err != nil { - t.Errorf("#%d: err = %s, want nil", i, err) - } - os.RemoveAll(p) - } -} - -// mustMakeDir builds the directory that contains files with the given -// names. If the name ends with '/', it is created as a directory. -func mustMakeDir(t *testing.T, names ...string) string { - p, err := ioutil.TempDir(os.TempDir(), "waltest") - if err != nil { - t.Fatal(err) - } - for _, n := range names { - if strings.HasSuffix(n, "/") { - if err := os.MkdirAll(path.Join(p, n), 0700); err != nil { - t.Fatal(err) - } - } else { - if _, err := os.Create(path.Join(p, n)); err != nil { - t.Fatal(err) - } - } - } - return p -}