Display message on failure to get lock on format.json in fs mode on startup (#6538)

Retry to see if the lock is free. Retry time will increase binomially.
This commit is contained in:
kannappanr 2019-01-09 10:13:04 -08:00 committed by GitHub
parent 4e6e05f8e0
commit a7d407fa42
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -24,6 +24,7 @@ import (
"path" "path"
"time" "time"
"github.com/minio/minio/cmd/logger"
"github.com/minio/minio/pkg/lock" "github.com/minio/minio/pkg/lock"
) )
@ -332,11 +333,24 @@ func formatFSFixDeploymentID(fsFormatPath string) error {
return nil return nil
} }
formatStartTime := time.Now().Round(time.Second)
getElapsedTime := func() string {
return time.Now().Round(time.Second).Sub(formatStartTime).String()
}
doneCh := make(chan struct{})
defer close(doneCh)
retryTimerCh := newRetryTimerSimple(doneCh)
for { for {
select {
case <-retryTimerCh:
wlk, err := lock.TryLockedOpenFile(fsFormatPath, os.O_RDWR, 0) wlk, err := lock.TryLockedOpenFile(fsFormatPath, os.O_RDWR, 0)
if err == lock.ErrAlreadyLocked { if err == lock.ErrAlreadyLocked {
// Lock already present, sleep and attempt again. // Lock already present, sleep and attempt again
time.Sleep(100 * time.Millisecond)
logger.Info("Another minio process(es) might be holding a lock to the file %s. Please kill that minio process(es) (elapsed %s)\n", fsFormatPath, getElapsedTime())
continue continue
} }
if err != nil { if err != nil {
@ -356,5 +370,6 @@ func formatFSFixDeploymentID(fsFormatPath string) error {
format.ID = mustGetUUID() format.ID = mustGetUUID()
return jsonSave(wlk, format) return jsonSave(wlk, format)
} }
}
} }