diff --git a/pkg/kubelet/kubelet_getters.go b/pkg/kubelet/kubelet_getters.go index 3b8f619e6b2..2b014d87027 100644 --- a/pkg/kubelet/kubelet_getters.go +++ b/pkg/kubelet/kubelet_getters.go @@ -252,18 +252,11 @@ func (kl *Kubelet) getPodVolumeNameListFromDisk(podUID types.UID) ([]string, err for _, volumePluginDir := range volumePluginDirs { volumePluginName := volumePluginDir.Name() volumePluginPath := path.Join(podVolDir, volumePluginName) - volumeDirs, volumeDirsStatErrs, err := util.ReadDirNoExit(volumePluginPath) + volumeDirs, err := util.ReadDirNoStat(volumePluginPath) if err != nil { - return volumes, fmt.Errorf("Could not read directory %s: %v", volumePluginPath, err) - } - for i, volumeDir := range volumeDirs { - if volumeDir != nil { - volumes = append(volumes, volumeDir.Name()) - continue - } - glog.Errorf("Could not read directory %s: %v", podVolDir, volumeDirsStatErrs[i]) - + return volumes, err } + volumes = append(volumes, volumeDirs...) } return volumes, nil } diff --git a/pkg/kubelet/volumemanager/reconciler/reconciler.go b/pkg/kubelet/volumemanager/reconciler/reconciler.go index 56aa2e19a5e..9deebb3f402 100644 --- a/pkg/kubelet/volumemanager/reconciler/reconciler.go +++ b/pkg/kubelet/volumemanager/reconciler/reconciler.go @@ -32,6 +32,7 @@ import ( "k8s.io/kubernetes/pkg/kubelet/config" "k8s.io/kubernetes/pkg/kubelet/volumemanager/cache" "k8s.io/kubernetes/pkg/types" + "k8s.io/kubernetes/pkg/util" "k8s.io/kubernetes/pkg/util/goroutinemap/exponentialbackoff" "k8s.io/kubernetes/pkg/util/mount" "k8s.io/kubernetes/pkg/util/strings" @@ -531,24 +532,21 @@ func getVolumesFromPodDir(podDir string) ([]podVolume, error) { pluginName := volumeDir.Name() volumePluginPath := path.Join(volumesDir, pluginName) - volumePluginDirs, err := ioutil.ReadDir(volumePluginPath) + volumePluginDirs, err := util.ReadDirNoStat(volumePluginPath) if err != nil { glog.Errorf("Could not read volume plugin directory %q: %v", volumePluginPath, err) continue } unescapePluginName := strings.UnescapeQualifiedNameForDisk(pluginName) - for _, volumeNameDir := range volumePluginDirs { - if volumeNameDir != nil { - volumeName := volumeNameDir.Name() - mountPath := path.Join(volumePluginPath, volumeName) - volumes = append(volumes, podVolume{ - podName: volumetypes.UniquePodName(podName), - volumeSpecName: volumeName, - mountPath: mountPath, - pluginName: unescapePluginName, - }) - } + for _, volumeName := range volumePluginDirs { + mountPath := path.Join(volumePluginPath, volumeName) + volumes = append(volumes, podVolume{ + podName: volumetypes.UniquePodName(podName), + volumeSpecName: volumeName, + mountPath: mountPath, + pluginName: unescapePluginName, + }) } } diff --git a/pkg/util/util.go b/pkg/util/util.go index 7a941495784..356b295a3e1 100644 --- a/pkg/util/util.go +++ b/pkg/util/util.go @@ -84,36 +84,20 @@ func FileExists(filename string) (bool, error) { return true, nil } -// borrowed from ioutil.ReadDir -// ReadDir reads the directory named by dirname and returns -// a list of directory entries, minus those with lstat errors -func ReadDirNoExit(dirname string) ([]os.FileInfo, []error, error) { +// ReadDirNoStat returns a string of files/directories contained +// in dirname without calling lstat on them. +func ReadDirNoStat(dirname string) ([]string, error) { if dirname == "" { dirname = "." } f, err := os.Open(dirname) if err != nil { - return nil, nil, err + return nil, err } defer f.Close() - names, err := f.Readdirnames(-1) - list := make([]os.FileInfo, 0, len(names)) - errs := make([]error, 0, len(names)) - for _, filename := range names { - fip, lerr := os.Lstat(dirname + "/" + filename) - if os.IsNotExist(lerr) { - // File disappeared between readdir + stat. - // Just treat it as if it didn't exist. - continue - } - - list = append(list, fip) - errs = append(errs, lerr) - } - - return list, errs, nil + return f.Readdirnames(-1) } // IntPtr returns a pointer to an int