Use app.driver.Stat for registry health check

`app.driver.List` on `"/"` is very expensive if registry contains significant amount of images. And the result isn't used anyways.
In most (if not all) storage drivers, `Stat` has a cheaper implementation, so use it instead to achieve the same goal.

Signed-off-by: yixi zhang <yixi@memsql.com>
This commit is contained in:
yixi zhang 2016-12-20 22:21:29 -08:00 committed by Derek McGowan
parent 74278cdaa6
commit abf796d17c
No known key found for this signature in database
GPG key ID: F58C5D0A4405ACDB
2 changed files with 2 additions and 2 deletions

View file

@ -341,7 +341,7 @@ func (app *App) RegisterHealthChecks(healthRegistries ...*health.Registry) {
} }
storageDriverCheck := func() error { storageDriverCheck := func() error {
_, err := app.driver.List(app, "/") // "/" should always exist _, err := app.driver.Stat(app, "/") // "/" should always exist
return err // any error will be treated as failure return err // any error will be treated as failure
} }

View file

@ -137,7 +137,7 @@ func (base *Base) Stat(ctx context.Context, path string) (storagedriver.FileInfo
ctx, done := context.WithTrace(ctx) ctx, done := context.WithTrace(ctx)
defer done("%s.Stat(%q)", base.Name(), path) defer done("%s.Stat(%q)", base.Name(), path)
if !storagedriver.PathRegexp.MatchString(path) { if !storagedriver.PathRegexp.MatchString(path) && path != "/" {
return nil, storagedriver.InvalidPathError{Path: path, DriverName: base.StorageDriver.Name()} return nil, storagedriver.InvalidPathError{Path: path, DriverName: base.StorageDriver.Name()}
} }