Browse Source

Merge pull request #6784 from xiang90/lock_warning

etcdserver: print out warning when waiting for file lock
Xiang Li 9 years ago
parent
commit
7d777a4a64
1 changed files with 16 additions and 1 deletions
  1. 16 1
      etcdserver/server.go

+ 16 - 1
etcdserver/server.go

@@ -265,7 +265,22 @@ func NewServer(cfg *ServerConfig) (srv *EtcdServer, err error) {
 
 
 	bepath := path.Join(cfg.SnapDir(), databaseFilename)
 	bepath := path.Join(cfg.SnapDir(), databaseFilename)
 	beExist := fileutil.Exist(bepath)
 	beExist := fileutil.Exist(bepath)
-	be := backend.NewDefaultBackend(bepath)
+
+	var be backend.Backend
+	beOpened := make(chan struct{})
+	go func() {
+		be = backend.NewDefaultBackend(bepath)
+		beOpened <- struct{}{}
+	}()
+
+	select {
+	case <-beOpened:
+	case <-time.After(time.Second):
+		plog.Warningf("another etcd process is running with the same data dir and holding the file lock.")
+		plog.Warningf("waiting for it to exit before starting...")
+		<-beOpened
+	}
+
 	defer func() {
 	defer func() {
 		if err != nil {
 		if err != nil {
 			be.Close()
 			be.Close()