Browse Source

Merge pull request #5777 from xiang90/c_be

etcdserver: refuse to restart if backend file is missing
Xiang Li 9 years ago
parent
commit
cfc171d5f7
1 changed files with 8 additions and 1 deletions
  1. 8 1
      etcdserver/server.go

+ 8 - 1
etcdserver/server.go

@@ -247,7 +247,10 @@ func NewServer(cfg *ServerConfig) (srv *EtcdServer, err error) {
 		plog.Fatalf("create snapshot directory error: %v", err)
 	}
 	ss := snap.New(cfg.SnapDir())
-	be := backend.NewDefaultBackend(path.Join(cfg.SnapDir(), databaseFilename))
+
+	bepath := path.Join(cfg.SnapDir(), databaseFilename)
+	beExist := fileutil.Exist(bepath)
+	be := backend.NewDefaultBackend(bepath)
 	defer func() {
 		if err != nil {
 			be.Close()
@@ -351,6 +354,10 @@ func NewServer(cfg *ServerConfig) (srv *EtcdServer, err error) {
 		cl.SetStore(st)
 		cl.SetBackend(be)
 		cl.Recover()
+		if cl.Version() != nil && cl.Version().LessThan(semver.Version{Major: 3}) && !beExist {
+			os.RemoveAll(bepath)
+			return nil, fmt.Errorf("database file (%v) of the backend is missing", bepath)
+		}
 	default:
 		return nil, fmt.Errorf("unsupported bootstrap config")
 	}