mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-09-16 06:32:32 +00:00
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:
@@ -242,6 +242,10 @@ func (mounter *Mounter) IsLikelyNotMountPoint(file string) (bool, error) {
|
|||||||
if stat.Mode()&os.ModeSymlink != 0 {
|
if stat.Mode()&os.ModeSymlink != 0 {
|
||||||
return false, err
|
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
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -329,30 +333,3 @@ func ListVolumesOnDisk(diskID string) (volumeIDs []string, err error) {
|
|||||||
volumeIds := strings.Split(strings.TrimSpace(string(output)), "\r\n")
|
volumeIds := strings.Split(strings.TrimSpace(string(output)), "\r\n")
|
||||||
return volumeIds, nil
|
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
|
|
||||||
}
|
|
||||||
|
@@ -27,7 +27,7 @@ import (
|
|||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
"k8s.io/utils/exec/testing"
|
testingexec "k8s.io/utils/exec/testing"
|
||||||
)
|
)
|
||||||
|
|
||||||
func makeLink(link, target string) error {
|
func makeLink(link, target string) error {
|
||||||
@@ -193,7 +193,26 @@ func TestIsLikelyNotMountPoint(t *testing.T) {
|
|||||||
}
|
}
|
||||||
return removeLink(targeLinkPath)
|
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,
|
false,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
@@ -207,7 +226,7 @@ func TestIsLikelyNotMountPoint(t *testing.T) {
|
|||||||
|
|
||||||
filePath := filepath.Join(base, test.fileName)
|
filePath := filepath.Join(base, test.fileName)
|
||||||
result, err := mounter.IsLikelyNotMountPoint(filePath)
|
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)
|
filePath, result, test.expectedResult)
|
||||||
|
|
||||||
if test.expectError {
|
if test.expectError {
|
||||||
|
Reference in New Issue
Block a user