Merge pull request #129368 from andyzhangx/adopt-go1.23-behavior-change-mount-utils

fix: adopt go1.23 behavior change in mount point parsing on Windows#1
This commit is contained in:
Kubernetes Prow Robot
2025-02-10 14:17:56 -08:00
committed by GitHub
2 changed files with 26 additions and 30 deletions

View File

@@ -242,6 +242,10 @@ func (mounter *Mounter) IsLikelyNotMountPoint(file string) (bool, error) {
if stat.Mode()&os.ModeSymlink != 0 {
return false, err
}
// go1.23 behavior change: https://github.com/golang/go/issues/63703#issuecomment-2535941458
if stat.Mode()&os.ModeIrregular != 0 {
return false, err
}
return true, nil
}
@@ -329,30 +333,3 @@ func ListVolumesOnDisk(diskID string) (volumeIDs []string, err error) {
volumeIds := strings.Split(strings.TrimSpace(string(output)), "\r\n")
return volumeIds, nil
}
// getAllParentLinks walks all symbolic links and return all the parent targets recursively
func getAllParentLinks(path string) ([]string, error) {
const maxIter = 255
links := []string{}
for {
links = append(links, path)
if len(links) > maxIter {
return links, fmt.Errorf("unexpected length of parent links: %v", links)
}
fi, err := os.Lstat(path)
if err != nil {
return links, fmt.Errorf("Lstat: %v", err)
}
if fi.Mode()&os.ModeSymlink == 0 {
break
}
path, err = os.Readlink(path)
if err != nil {
return links, fmt.Errorf("Readlink error: %v", err)
}
}
return links, nil
}

View File

@@ -27,7 +27,7 @@ import (
"testing"
"github.com/stretchr/testify/assert"
"k8s.io/utils/exec/testing"
testingexec "k8s.io/utils/exec/testing"
)
func makeLink(link, target string) error {
@@ -193,7 +193,26 @@ func TestIsLikelyNotMountPoint(t *testing.T) {
}
return removeLink(targeLinkPath)
},
true,
false,
false,
},
{
"junction",
"targetDir",
func(base, fileName, targetLinkName string) error {
target := filepath.Join(base, targetLinkName)
if err := os.Mkdir(target, 0o750); err != nil {
return err
}
// create a Junction file type on Windows
junction := filepath.Join(base, fileName)
if output, err := exec.Command("cmd", "/c", "mklink", "/J", junction, target).CombinedOutput(); err != nil {
return fmt.Errorf("mklink failed: %v, link(%q) target(%q) output: %q", err, junction, target, string(output))
}
return nil
},
false,
false,
},
}
@@ -207,7 +226,7 @@ func TestIsLikelyNotMountPoint(t *testing.T) {
filePath := filepath.Join(base, test.fileName)
result, err := mounter.IsLikelyNotMountPoint(filePath)
assert.Equal(t, result, test.expectedResult, "Expect result not equal with IsLikelyNotMountPoint(%s) return: %q, expected: %q",
assert.Equal(t, test.expectedResult, result, "Expect result not equal with IsLikelyNotMountPoint(%s) return: %q, expected: %q",
filePath, result, test.expectedResult)
if test.expectError {