mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
Merge pull request #35528 from thaJeztah/ignore-empty-graphdirs
Skip empty directories on prior graphdriver detection
This commit is contained in:
commit
9ae697167c
2 changed files with 57 additions and 1 deletions
|
@ -283,8 +283,27 @@ func scanPriorDrivers(root string) map[string]bool {
|
|||
for driver := range drivers {
|
||||
p := filepath.Join(root, driver)
|
||||
if _, err := os.Stat(p); err == nil && driver != "vfs" {
|
||||
driversMap[driver] = true
|
||||
if !isEmptyDir(p) {
|
||||
driversMap[driver] = true
|
||||
}
|
||||
}
|
||||
}
|
||||
return driversMap
|
||||
}
|
||||
|
||||
// isEmptyDir checks if a directory is empty. It is used to check if prior
|
||||
// storage-driver directories exist. If an error occurs, it also assumes the
|
||||
// directory is not empty (which preserves the behavior _before_ this check
|
||||
// was added)
|
||||
func isEmptyDir(name string) bool {
|
||||
f, err := os.Open(name)
|
||||
if err != nil {
|
||||
return false
|
||||
}
|
||||
defer f.Close()
|
||||
|
||||
if _, err = f.Readdirnames(1); err == io.EOF {
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
|
37
daemon/graphdriver/driver_test.go
Normal file
37
daemon/graphdriver/driver_test.go
Normal file
|
@ -0,0 +1,37 @@
|
|||
package graphdriver
|
||||
|
||||
import (
|
||||
"io/ioutil"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func TestIsEmptyDir(t *testing.T) {
|
||||
tmp, err := ioutil.TempDir("", "test-is-empty-dir")
|
||||
require.NoError(t, err)
|
||||
defer os.RemoveAll(tmp)
|
||||
|
||||
d := filepath.Join(tmp, "empty-dir")
|
||||
err = os.Mkdir(d, 0755)
|
||||
require.NoError(t, err)
|
||||
empty := isEmptyDir(d)
|
||||
assert.True(t, empty)
|
||||
|
||||
d = filepath.Join(tmp, "dir-with-subdir")
|
||||
err = os.MkdirAll(filepath.Join(d, "subdir"), 0755)
|
||||
require.NoError(t, err)
|
||||
empty = isEmptyDir(d)
|
||||
assert.False(t, empty)
|
||||
|
||||
d = filepath.Join(tmp, "dir-with-empty-file")
|
||||
err = os.Mkdir(d, 0755)
|
||||
require.NoError(t, err)
|
||||
_, err = ioutil.TempFile(d, "file")
|
||||
require.NoError(t, err)
|
||||
empty = isEmptyDir(d)
|
||||
assert.False(t, empty)
|
||||
}
|
Loading…
Add table
Reference in a new issue