Retry registering a volume driver

Signed-off-by: Stephen Rust <srust@blockbridge.com>
This commit is contained in:
Stephen Rust 2015-08-28 14:55:05 -04:00
parent 65841492f0
commit 7eb8f570af

View file

@ -25,6 +25,7 @@ package plugins
import ( import (
"errors" "errors"
"sync" "sync"
"time"
"github.com/Sirupsen/logrus" "github.com/Sirupsen/logrus"
"github.com/docker/docker/pkg/tlsconfig" "github.com/docker/docker/pkg/tlsconfig"
@ -109,27 +110,45 @@ func (p *Plugin) activateWithLock() error {
} }
func load(name string) (*Plugin, error) { func load(name string) (*Plugin, error) {
storage.Lock() return loadWithRetry(name, true)
}
func loadWithRetry(name string, retry bool) (*Plugin, error) {
registry := newLocalRegistry() registry := newLocalRegistry()
pl, err := registry.Plugin(name) start := time.Now()
if err == nil {
storage.plugins[name] = pl
}
storage.Unlock()
if err != nil { var retries int
return nil, err for {
} pl, err := registry.Plugin(name)
if err != nil {
if !retry {
return nil, err
}
err = pl.activate() timeOff := backoff(retries)
if abort(start, timeOff) {
return nil, err
}
retries++
logrus.Warnf("Unable to locate plugin: %s, retrying in %v", name, timeOff)
time.Sleep(timeOff)
continue
}
if err != nil {
storage.Lock() storage.Lock()
delete(storage.plugins, name) storage.plugins[name] = pl
storage.Unlock() storage.Unlock()
}
return pl, err err = pl.activate()
if err != nil {
storage.Lock()
delete(storage.plugins, name)
storage.Unlock()
}
return pl, err
}
} }
func get(name string) (*Plugin, error) { func get(name string) (*Plugin, error) {