Merge pull request #15921 from srust/volume_driver_register_retry

Retry registering a volume driver
This commit is contained in:
David Calavera 2015-09-02 11:24:52 +02:00
commit 2c6dacda2e

View file

@ -25,6 +25,7 @@ package plugins
import (
"errors"
"sync"
"time"
"github.com/Sirupsen/logrus"
"github.com/docker/docker/pkg/tlsconfig"
@ -109,18 +110,35 @@ func (p *Plugin) activateWithLock() error {
}
func load(name string) (*Plugin, error) {
storage.Lock()
registry := newLocalRegistry()
pl, err := registry.Plugin(name)
if err == nil {
storage.plugins[name] = pl
}
storage.Unlock()
return loadWithRetry(name, true)
}
func loadWithRetry(name string, retry bool) (*Plugin, error) {
registry := newLocalRegistry()
start := time.Now()
var retries int
for {
pl, err := registry.Plugin(name)
if err != nil {
if !retry {
return nil, err
}
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
}
storage.Lock()
storage.plugins[name] = pl
storage.Unlock()
err = pl.activate()
if err != nil {
@ -130,6 +148,7 @@ func load(name string) (*Plugin, error) {
}
return pl, err
}
}
func get(name string) (*Plugin, error) {