review feedback

Signed-off-by: Huamin Chen <hchen@redhat.com>
This commit is contained in:
Huamin Chen 2015-09-18 10:50:30 -04:00
parent ad308cdf45
commit 29bd6e738d
2 changed files with 17 additions and 10 deletions

View File

@ -145,12 +145,19 @@ func (kl *Kubelet) getPodVolumes(podUID types.UID) ([]*volumeTuple, error) {
for _, volumeKindDir := range volumeKindDirs { for _, volumeKindDir := range volumeKindDirs {
volumeKind := volumeKindDir.Name() volumeKind := volumeKindDir.Name()
volumeKindPath := path.Join(podVolDir, volumeKind) volumeKindPath := path.Join(podVolDir, volumeKind)
volumeNameDirs, err := util.ReadDirNoExit(volumeKindPath) // ioutil.ReadDir exits without returning any healthy dir when encountering the first lstat error
// but skipping dirs means no cleanup for healthy volumes. switching to a no-exit api solves this problem
volumeNameDirs, volumeNameDirsStat, err := util.ReadDirNoExit(volumeKindPath)
if err != nil { if err != nil {
return []*volumeTuple{}, fmt.Errorf("could not read directory %s: %v", volumeKindPath, err) return []*volumeTuple{}, fmt.Errorf("could not read directory %s: %v", volumeKindPath, err)
} }
for _, volumeNameDir := range volumeNameDirs { for i, volumeNameDir := range volumeNameDirs {
volumes = append(volumes, &volumeTuple{Kind: volumeKind, Name: volumeNameDir.Name()}) if volumeNameDir != nil {
volumes = append(volumes, &volumeTuple{Kind: volumeKind, Name: volumeNameDir.Name()})
} else {
lerr := volumeNameDirsStat[i]
glog.Errorf("Could not read directory %s: %v", podVolDir, lerr)
}
} }
} }
return volumes, nil return volumes, nil

View File

@ -523,19 +523,20 @@ func FileExists(filename string) (bool, error) {
// borrowed from ioutil.ReadDir // borrowed from ioutil.ReadDir
// ReadDir reads the directory named by dirname and returns // ReadDir reads the directory named by dirname and returns
// a list of directory entries, minus those with lstat errors // a list of directory entries, minus those with lstat errors
func ReadDirNoExit(dirname string) ([]os.FileInfo, error) { func ReadDirNoExit(dirname string) ([]os.FileInfo, []error, error) {
if dirname == "" { if dirname == "" {
dirname = "." dirname = "."
} }
f, err := os.Open(dirname) f, err := os.Open(dirname)
if err != nil { if err != nil {
return nil, err return nil, nil, err
} }
defer f.Close() defer f.Close()
names, err := f.Readdirnames(-1) names, err := f.Readdirnames(-1)
list := make([]os.FileInfo, 0, len(names)) list := make([]os.FileInfo, 0, len(names))
errs := make([]error, 0, len(names))
for _, filename := range names { for _, filename := range names {
fip, lerr := os.Lstat(dirname + "/" + filename) fip, lerr := os.Lstat(dirname + "/" + filename)
if os.IsNotExist(lerr) { if os.IsNotExist(lerr) {
@ -543,11 +544,10 @@ func ReadDirNoExit(dirname string) ([]os.FileInfo, error) {
// Just treat it as if it didn't exist. // Just treat it as if it didn't exist.
continue continue
} }
// if lstat fails, fip is nil
if fip != nil { list = append(list, fip)
list = append(list, fip) errs = append(errs, lerr)
}
} }
return list, nil return list, errs, nil
} }