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"
"time"
"github.com/minio/minio/cmd/logger"
"github.com/minio/minio/pkg/lock"
)
@ -332,11 +333,24 @@ func formatFSFixDeploymentID(fsFormatPath string) error {
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 {
select {
case <-retryTimerCh:
wlk, err := lock.TryLockedOpenFile(fsFormatPath, os.O_RDWR, 0)
if err == lock.ErrAlreadyLocked {
// Lock already present, sleep and attempt again.
time.Sleep(100 * time.Millisecond)
// Lock already present, sleep and attempt again
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
}
if err != nil {
@ -356,5 +370,6 @@ func formatFSFixDeploymentID(fsFormatPath string) error {
format.ID = mustGetUUID()
return jsonSave(wlk, format)
}
}
}