mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-08-10 04:27:54 +00:00
review feedback
Signed-off-by: Huamin Chen <hchen@redhat.com>
This commit is contained in:
parent
ad308cdf45
commit
29bd6e738d
@ -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
|
||||||
|
@ -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
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user